[buddypress-trac] [BuddyPress Trac] #8355: Site Admins cannot edit BP emails

buddypress-trac noreply at wordpress.org
Thu Sep 3 22:11:14 UTC 2020


#8355: Site Admins cannot edit BP emails
-----------------------------------+---------------------
 Reporter:  shanebp                |       Owner:  DJPaul
     Type:  defect (bug)           |      Status:  new
 Priority:  normal                 |   Milestone:  7.0.0
Component:  Emails                 |     Version:  6.2.0
 Severity:  normal                 |  Resolution:
 Keywords:  has-patch 2nd-opinion  |
-----------------------------------+---------------------
Changes (by imath):

 * keywords:  needs-patch => has-patch 2nd-opinion


Comment:

 So here's the situation, WordPress uses 3 meta capabilities (edit_post,
 read_post, and delete_post) that are mapped to corresponding primitive
 capabilities depending on the context (for our case it's
 `edit_others_posts` & `edit_published_posts`).
 See
 https://developer.wordpress.org/reference/functions/register_post_type/#capabilities.

 Although we map primitive caps to `bp_moderate`, this cap is not part of
 the Administrator's all caps but is mapped to `manage_options` into
 `_bp_enforce_bp_moderate_cap_for_admins()`.

 When WordPress checks for the `edit_post` cap, it adds the `bp_moderate`
 cap to the caps to check, but the `$cap` that is passed to
 `_bp_enforce_bp_moderate_cap_for_admins()` is still `edit_post` and not
 `bp_moderate`.

 So `_bp_enforce_bp_moderate_cap_for_admins()` receives:

 - `$cap = 'edit_post'`,
 - `$caps = array( 'bp_moderate', 'edit_published_posts' )`,
 - The user ID,
 - and `$args = array( $post_id )`.

 and doesn't return `array( 'manage_options' )`, but the unchanged `$caps`.
 As the first admin is the author of the bp_email post_type, he can edit
 it, but other administrators cannot because it's not `edit_other_posts`
 that is checked against the Administrator's role database capabilities but
 `bp_moderate`, which is not into the Administrator's role database
 capabilities 🤪

 A possible way to fix this, is to use the `capability_type` argument of
 the `register_post_type()` function instead of the `capabilities` one and
 to edit `_bp_enforce_bp_moderate_cap_for_admins()` to check some BP
 Administrator's caps which includes `bp_moderate` and the BP Email post
 type capabilities.

 That's what I did in 8355.patch to fix the issue. I'd be happy to have a
 second thought about it 🤔 What do you think about it @boonebgorges ?

-- 
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/8355#comment:4>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac


More information about the buddypress-trac mailing list