Created
April 2, 2013 03:51
-
-
Save intelliweb/5289795 to your computer and use it in GitHub Desktop.
WP: Editor can create/modify any user except administrator. Source: http://wordpress.stackexchange.com/questions/4479/editor-can-create-any-new-user-except-administrator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Intw_User_Caps { | |
// Add our filters | |
function Intw_User_Caps(){ | |
add_filter( 'editable_roles', array(&$this, 'editable_roles')); | |
add_filter( 'map_meta_cap', array(&$this, 'map_meta_cap'),10,4); | |
} | |
// Remove 'Administrator' from the list of roles if the current user is not an admin | |
function editable_roles( $roles ){ | |
if( isset( $roles['administrator'] ) && !current_user_can('administrator') ){ | |
unset( $roles['administrator']); | |
} | |
return $roles; | |
} | |
// If someone is trying to edit or delete and admin and that user isn't an admin, don't allow it | |
function map_meta_cap( $caps, $cap, $user_id, $args ){ | |
switch( $cap ){ | |
case 'edit_user': | |
case 'remove_user': | |
case 'promote_user': | |
if( isset($args[0]) && $args[0] == $user_id ) | |
break; | |
elseif( !isset($args[0]) ) | |
$caps[] = 'do_not_allow'; | |
$other = new WP_User( absint($args[0]) ); | |
if( $other->has_cap( 'administrator' ) ){ | |
if(!current_user_can('administrator')){ | |
$caps[] = 'do_not_allow'; | |
} | |
} | |
break; | |
case 'delete_user': | |
case 'delete_users': | |
if( !isset($args[0]) ) | |
break; | |
$other = new WP_User( absint($args[0]) ); | |
if( $other->has_cap( 'administrator' ) ){ | |
if(!current_user_can('administrator')){ | |
$caps[] = 'do_not_allow'; | |
} | |
} | |
break; | |
default: | |
break; | |
} | |
return $caps; | |
} | |
} | |
$intw_user_caps = new Intw_User_Caps(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment