it-swarm.com.de

Verhindern, dass Benutzer neue Benutzer mit bestimmten Rollen erstellen

Bei einer Installation mit mehreren Standorten habe ich einige benutzerdefinierte Rollen erstellt. Einige von ihnen können neue Benutzer erstellen.

Ich möchte Benutzern erlauben, neue Benutzer nur mit zugelassenen Rollen zu erstellen.

Ein Schritt besteht darin, den editable_roles-Filter zu verwenden, um Rollen aus der Dropdown-Liste zu entfernen. Dies hindert den Benutzer jedoch nicht daran, den Auswahlwert zu ändern und einen Benutzer mit der Rolle "Nicht zulässig" zu erstellen.

3
Christopher

Ein Schritt besteht darin, den editable_roles-Filter zu verwenden, um Rollen aus der Dropdown-Liste zu entfernen. Dies hindert den Benutzer jedoch nicht daran, den Auswahlwert zu ändern und einen Benutzer mit der Rolle "Nicht zulässig" zu erstellen.

Ja tut es. Dieser Filter ist nicht nur für das Dropdown gedacht. Das Ändern von editable_roles hindert Benutzer tatsächlich daran, eine Rolle zuzuweisen, zu der sie nicht berechtigt sind.

Dies liegt daran, dass edit_user() (die zum Hinzufügen neuer Benutzer verwendete Funktion) get_editable_roles() ebenfalls aufruft und blockiert, wenn man Benutzern diese Rolle nicht zuweisen darf.

Hier ist ein einfaches Beispiel dafür, was Sie tun können:

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