Wie kann ich eine Liste aller Berechtigungen eines Benutzers abrufen?

9

Wie kann ich eine Liste aller Berechtigungen abrufen, die er im benutzerdefinierten Modul von Drupal 8 hat, wenn ich das aktuelle Benutzerobjekt habe? Ich möchte nicht nach einer bestimmten Berechtigung suchen, die $ current_user-> hasPermission ("Berechtigungsname") wäre.

Ich möchte die gesamte Liste seiner Berechtigungen erhalten.

Vielen Dank

Diana
quelle

Antworten:

11

Können Sie das folgende Snippet ausprobieren:

$user = \Drupal::currentUser();
$user_roles = $user->getRoles();
$roles_permissions = user_role_permissions($user_roles);

Dadurch erhalten Sie Berechtigungen, die nach Rollen gruppiert sind. Aber höchstwahrscheinlich möchten Sie sie in einem Array.

Daher können Sie dies verwenden

$final_array = array();
foreach ($roles_permissions as $role_key => $permissions) {
  foreach ($permissions as $permission) {
    $final_array[] = $permission;
  }
}

Wenn Sie einen anderen Benutzer als den aktuell angemeldeten Benutzer laden möchten, können Sie verwenden

$some_user = \Drupal\user\Entity\User::load(123);

Wobei 123 für die Benutzer-ID steht. Für mehr Informationen:

https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21Entity.php/function/Entity%3A%3Aload/8.2.x

Freundliche Grüße,

Oleg

Oleg Videnov
quelle
Dadurch wird der aktuell angemeldete Benutzer und kein Benutzer abgerufen. Theoretisch könnte das Skript / Snippet jedoch so geändert werden, dass ein bestimmter Benutzer anhand seiner ID geladen wird und anschließend die Rollenberechtigungen angezeigt werden, über die er verfügt.
Tenken
Ja @tenken, du bist richtig. Ich habe in der Frage $ current_user gesehen, also habe ich angenommen, dass es sich um den aktuell angemeldeten Benutzer handelt. #TODO, fügen Sie ein Skript zum Laden eines anderen Benutzers hinzu.
Oleg Videnov