WordPress.org

Make WordPress Core

Opened 20 months ago

Last modified 7 weeks ago

#26365 new defect (bug)

map_meta_cap() should use parent post status when post has a post status of inherit

Reported by: methnen Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version: 3.8
Component: Role/Capability Keywords: has-patch needs-unit-tests
Focuses: Cc:

Description (last modified by SergeyBiryukov)

When a post has a status of inherit map_meta_cap() fails to use the parent's status and so logic that uses the status to determine the mapping doesn't behave as expected.

For example read_post() will often fail when it should pass. Similarly for delete_post() and edit_post().

This has recently caused a variety of difficulties in a project I've been working on where we have a custom post type that uses the inherit post status on children so authors only need to manage the post status of the main parent post.

The fix is two parts. One a fix to get_post_status() that causes it to check the parent status so it'll work backwards to the first post that has a valid (not 'inherit') post status.

The second is a fix to map_meta_cap() that checks for a post status of inherit on the post object and then uses get_post_status() on the post_parent id value.

A couple related/similar issues:
#23458 (these patches would fix the root issue)
#17668 (fixed)

Attachments (5)

capabilities.diff (1.3 KB) - added by methnen 20 months ago.
map_meta_cap_fix
post.diff (511 bytes) - added by methnen 20 months ago.
get_post_status_fix
capabilities.2.diff (1.2 KB) - added by methnen 7 weeks ago.
Updated capabilities patch.
post.2.diff (405 bytes) - added by methnen 7 weeks ago.
Updated post patch.
26365.diff (1.6 KB) - added by stevenkword 7 weeks ago.

Download all attachments as: .zip

Change History (18)

@methnen20 months ago

map_meta_cap_fix

@methnen20 months ago

get_post_status_fix

comment:1 @misterbisson20 months ago

  • Keywords has-patch added

+1 one this. I'm biased because we need this to resolve the bugs named above. We make extensive use of custom post types with inherit status on a number of gigaom.com properties.

comment:2 @misterbisson20 months ago

  • Keywords needs-patch 2nd-opinion added; has-patch removed

comment:3 @misterbisson20 months ago

  • Keywords needs-patch removed

comment:4 @misterbisson20 months ago

  • Keywords has-patch added

comment:5 @SergeyBiryukov20 months ago

  • Description modified (diff)

comment:6 @antpb7 weeks ago

  • Keywords needs-refresh added

Attempted to push out the patch but it's been open for 2 years and failed on the apply. Needs a refresh.

comment:7 @antpb7 weeks ago

  • Keywords needs-patch added; has-patch removed

comment:8 @methnen7 weeks ago

@antpb I'll get updated patches in sometime today. Glad to see this getting some attention.

@methnen7 weeks ago

Updated capabilities patch.

@methnen7 weeks ago

Updated post patch.

comment:9 @methnen7 weeks ago

Updated patches are now attached.

@stevenkword7 weeks ago

comment:10 @stevenkword7 weeks ago

26365.diff simply combines to previous solution into a single diff.

comment:11 @johnbillion7 weeks ago

  • Keywords has-patch needs-unit-tests added; 2nd-opinion needs-refresh needs-patch removed

This needs unit test coverage.

comment:12 @stevenkword7 weeks ago

Note 26365.diff will collide with the solution proposed in #23458, which was milestoned for 4.3.

Last edited 7 weeks ago by stevenkword (previous) (diff)

comment:13 @methnen7 weeks ago

@stevenkword I'm fairly sure that's only the case in the second post.php patch.

map_meta_cap does not ever call on get_post_status and thus still needs to be fixed in order to properly support 'inherit' on custom post types.

Note: See TracTickets for help on using tickets.