deny_role_change

Deny role change for non-admin users

This one’s a quick tip. As you might (not) know, in WordPress everyone, who has the ability to change user roles (capability name: edit_users), can give a user any role that is present. This also gives your editors or authors the ability to change others roles to administrator. Something that often is not appreciated.

The simple solution

Gladly WordPress got a… wait for it… filter! Simply unset whatever role you don’t want to grant access to, based on the current users given role.

/**
 * Deny access to 'administrator' for other roles
 * Else anyone, with the edit_users capability, can edit others
 * to be administrators - even if they are only editors or authors
 * 
 * @param (array) $all_roles
 * @return (array) $all_roles
 */
function deny_change_to_admins( $all_roles )
{
	if ( ! current_user_can('manage_options') )
		unset( $all_roles['administrator'] );

	if ( 
		! current_user_can('manage_options')
		OR ! current_user_can('edit_others_posts')
	)
		unset( $all_roles['editor'] );

	if ( 
		! current_user_can('manage_options')
		OR ! current_user_can('edit_others_posts')
		OR ! current_user_can('edit_published_posts')
	)
		unset( $all_roles['author'] );
}
// This filter needs to get hooked to the init/admin_init hook
add_filter( 'editable_roles', 'deny_change_to_admins' );

2 comments:

  1. Hi Franz-Josef,

    schön das du jetzt auch bloggst.
    Schade das man hier nicht flüstern kann, dann würde ich dich darauf aufmerksam machen, das deine Codeblöcke hinten abgeschnitten werden, weil #main ein overflow:hidden hat oder pre.php ein overflow:auto fehlt.

    Der erste Kommentar und gleich Gemecker, ist aber nicht bös gemeint. :)

    1. Servus Klaus,
      hier ist (fast) alles erlaubt und Kritik ist immer willkommen. An der Oberfläche werde ich im neuen Jahr so einiges ändern: Stylesheets, Skripte usw. Danke in jedem Fall für den Hinweis. Wünsche Dir und den Deinen ein besinnliches und friedliches Fest.

Comments are closed.