Nous voulons fournir aux propriétaires de leur site, leur rôle d’administrateur, mais nous ne voulons pas qu’ils suppriment l’utilisateur 1. Nous ne voulons pas non plus d’une solution peu coûteuse empêchant leur compte d’administrateur de supprimer des utilisateurs en général; les autorisations utilisateur pour ajouter/modifier/supprimer des utilisateurs, mais pas le compte d'utilisateur 1 ou un rôle supérieur.
Dans Drupal, il existe un module appelé "Protéger l'utilisateur 1" qui permet la création de plusieurs comptes d'administrateur, mais aucun d'entre eux ne peut éditer/supprimer l'utilisateur 1. L'écosystème WP a-t-il quelque chose comme ça?
C'est un peu différent de WP que de Drupal. Premièrement, le rôle admin
est spécifiquement conçu pour pouvoir tout faire. Plutôt que d'essayer de restreindre le rôle d'administrateur, il est recommandé de créer les rôles personnalisés dont vous avez besoin. Vous devez configurer un rôle de type almost-admin
doté de toutes les fonctionnalités, à l'exception de celui que vous souhaitez restreindre. De toute façon, c’est mieux pour les propriétaires de sites, car vous pouvez supprimer certaines des fonctionnalités plus techniques dont seul un développeur aurait réellement besoin, et en limitant un peu les connexions des propriétaires, vous n’avez pas autant d’administrateurs. -les utilisateurs de niveau flottant là où il devient de plus en plus probable que le site soit piraté. Si le site est piraté mais que l'utilisateur a obtenu un nom d'utilisateur de niveau inférieur, vous pourrez peut-être éviter certains dommages.
L’autre problème est que le système de rôles et de fonctionnalités WP n’est pas configuré pour permettre aux utilisateurs d’avoir un accès partiel à ces fonctionnalités. Ainsi, vous ne pouvez autoriser aucun rôle à posséder la capacité delete_users
pour certains rôles et pas pour d'autres, même si vous utilisez des plugins de gestion d'utilisateurs populaires. Mais peut-être que les autres rôles suffiraient: si vous leur refusez la possibilité de delete_users
dans tous les domaines, vous pouvez toujours leur donner la possibilité de add_users
, edit_users
et promote_users
si vous devez réellement les restreindre.
C'est une utilisation parfaite pour le filtre map_meta_cap
.
function my_map_meta_cap( $caps, $cap, $user_id, $args ) {
if( 'delete_user' !== $cap ) {
return $caps;
}
if( isset( $args[0] ) && 1 === $args[0] ) {
$caps[] = 'cant_do_this';
}
return $caps;
}
add_filter( 'map_meta_cap', 'my_map_meta_cap', 10, 4 );
Ce code nécessite que toute personne essayant de supprimer l'utilisateur avec un user_id de 1 doit avoir la capacité cant_do_this
. Puisque personne n’a cette capacité, personne ne peut supprimer cet utilisateur.
Bien sûr, si vos administrateurs peuvent éditer des plugins, ils peuvent simplement le désactiver et supprimer l’utilisateur de toute façon. Probablement préférable de l'utiliser comme un plugin à utiliser absolument.