it-swarm.com.de

Verhindern oder deaktivieren Sie das Erstellen neuer Benutzer oder das Ändern der Rollen vorhandener Benutzer in Administrator

Ich versuche, der Editorrolle mehr Berechtigungen zu erteilen, indem ich ihr Zugriff zum Erstellen von Benutzerkonten gewähre. Siehe den Code unten. Ich möchte jedoch verhindern, dass vorhandene Benutzer mit der Rolle des Administrators erstellt oder bearbeitet werden.

function add_theme_caps() {
    $role = get_role('editor');
    $role->add_cap( 'edit_theme_options' );
    $role->add_cap('list_users');
    $role->add_cap('create_users');
    $role->add_cap('delete_users');
    $role->add_cap('edit_users');
}
add_action( 'admin_init', 'add_theme_caps');

Dinge, die ich versuche zu erreichen.

  1. Die Option list_users listet alle Benutzer auf. Ich möchte nur die Nicht-Admin-Benutzer auflisten.
  2. Ich möchte verhindern, dass diese Rolle neue Benutzerkonten mit der Rolle des Administrators erstellt und die Rolle vorhandener Benutzer in einen Administrator ändert.
2
Arpit Jacob

Imho, das ist eines der wichtigsten Dinge in Bezug auf Benutzer:

/**
 * 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
 * 
 * @since   0.1
 * @param   (array) $all_roles
 * @return  (array) $all_roles
 */
function deny_change_to_admin( $all_roles )
{
    if ( ! current_user_can('administrator') )
        unset( $all_roles['administrator'] );

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

    if ( 
        ! current_user_can('administrator')
        OR ! current_user_can('editor')
        OR ! current_user_can('author')
    )
        unset( $all_roles['author'] );

    return $all_roles;
}
function deny_rolechange()
{
    add_filter( 'editable_roles', 'deny_change_to_admin' );
}
add_action( 'after_setup_theme', 'deny_rolechange' );
3
kaiser