web-dev-qa-db-fra.com

Empêcher l'utilisateur de créer de nouveaux utilisateurs avec des rôles spécifiques

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é".

3
Christopher

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