Sur une installation multisite, j'ai créé des rôles personnalisés. Certains d'entre eux ont la capacité de créer de nouveaux utilisateurs.
Je souhaite autoriser les utilisateurs à créer de nouveaux utilisateurs uniquement avec des rôles autorisés.
Une étape consiste à utiliser le filtre editable_roles
pour supprimer les rôles du menu déroulant, mais cela n'empêche pas l'utilisateur de modifier la valeur de sélection et de créer un utilisateur avec un rôle "non autorisé".
Une étape consiste à utiliser le filtre
editable_roles
pour supprimer les rôles du menu déroulant, mais cela n'empêche pas l'utilisateur de modifier la valeur de sélection et de créer un utilisateur avec un rôle "non autorisé".
Oui. Ce filtre n'est pas juste pour la liste déroulante. Modifier editable_roles
empêche en fait les utilisateurs d'attribuer un rôle auquel ils ne sont pas autorisés.
Cela est dû au fait que edit_user()
(la fonction utilisée pour ajouter de nouveaux utilisateurs) appelle get_editable_roles()
également et s’en va s’il n’est pas autorisé à donner ce rôle aux utilisateurs.
Voici un exemple simple de ce que vous pouvez faire:
/**
* Removes Administrator from roles list if user isn't an admin themselves.
*
* This way, only admins can make new admins.
*
* @param array $all_roles List of roles.
* @return array Modified list of roles.
*/
function wpse_293133_filter_editable_roles( $all_roles ) {
if ( ! is_super_admin( get_current_user_id() ) ) {
unset( $all_roles['administrator'] );
}
return $all_roles;
}
add_filter( 'editable_roles', 'wpse_293133_filter_editable_roles' );