web-dev-qa-db-fra.com

Empêcher les éditeurs de modifier/supprimer des comptes administrateurs

J'ai besoin d'éditeurs pour pouvoir ajouter/modifier/supprimer d'autres utilisateurs. Leur donner ces capacités est facile avec un code similaire à celui-ci:

$editor = get_role('editor');
$editor->add_cap('edit_users');

Le problème est que, lorsqu'ils disposent des privilèges nécessaires pour ajouter/modifier/supprimer d'autres utilisateurs, ils peuvent également effectuer toutes ces tâches pour les utilisateurs administrateurs et/ou se promouvoir eux-mêmes au rôle d'administrateur.

Existe-t-il un moyen de leur permettre d'ajouter/modifier/supprimer uniquement les rôles d'utilisateur spécifiés (meilleur scénario)? Ou bien, au lieu d'empêcher les rédacteurs de faire quoi que ce soit avec les comptes d'administrateurs, et même de cacher ces comptes à la liste?

1
Sam

Il existe une fonction utilisée par WordPress appelée get_editable_roles, qui est (je pense) utilisée pour déterminer les rôles qu'un utilisateur particulier peut modifier. Le source de cette fonction ressemble à ceci:

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

Il semble donc que vous puissiez vous connecter au filtre * editable_roles * pour obtenir ce que vous cherchez. Quelque chose comme ça:

function wpse_80220_filter( $roles ) {
    $current_user = wp_get_current_user();

    if ( in_array( 'editor', $current_user->roles ) ) {
        unset( $roles['administrator'] );
    }

    return $roles;
}
add_filter( 'editable_roles', 'wpse_80220_filter' );

Je n'ai testé aucun des codes ci-dessus, mais jouez avec et laissez-moi savoir s'il réussit!

2
Andy Adams