web-dev-qa-db-fra.com

Empêcher ou désactiver la création de nouveaux utilisateurs ou la modification du rôle des utilisateurs existants en administrateur

J'essaie de donner plus d'autorisations au rôle d'éditeur en lui donnant l'accès pour créer des comptes d'utilisateurs. Voir le code ci-dessous. Mais je voudrais l'empêcher de créer ou de modifier des utilisateurs existants avec le rôle d'administrateur.

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');

Les choses que j'essaye de réaliser.

  1. L'option list_users répertorie tous les utilisateurs. Je voudrais ne lister que les utilisateurs non-administrateurs.
  2. Je souhaite limiter ce rôle à la création de nouveaux comptes d'utilisateur avec le rôle d'administrateur et l'empêcher de changer le rôle d'un utilisateur existant en administrateur.
2
Arpit Jacob

À mon humble avis, l’une des choses les plus importantes concernant les utilisateurs:

/**
 * 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