
Benutzer, Rollen und Berechtigungen in Drupal - die Wichtigsten Informationen für einen Drupal-Entwickler
Drupal wird als Plattform für den Aufbau von Websites gewählt, unter anderem wegen seiner Flexibilität. Wenn Sie ein System möchten, das ideal zu Ihrem Geschäftsmodell passt und besser als die Systeme der Konkurrenz ist, erweist sich Drupal als perfekt. Einer der Bereiche, die Sie in Drupal anpassen können, ist das Benutzergenehmigungssystem. Nehmen Sie sich ein paar Minuten Zeit, um mehr über die Verwaltung der Berechtigungen in Drupal zu erfahren.
Allgemeine Informationen
Drupal ermöglicht die Verwaltung des Zugriffs sowohl über das Admin-Panel als auch auf Code-Ebene. In diesem Beitrag werde ich diese beiden Möglichkeiten und die am häufigsten genutzten Anwendungsfälle vorstellen.
Rollen und Berechtigungen im Drupal-Core
Wenn Sie das erste Mal mit Drupal und seinem Berechtigungssystem zu tun haben, sollten Sie wissen, dass es drei Elemente gibt, die zur Erteilung von Berechtigungen verwendet werden:
- Benutzer
- Rolle
- Berechtigung
Bei der Installation von Drupal erstellen Sie ein Root-Administrator-Konto im System (Identifikator 1 in der Datenbank). Dies kann mit dem Root-Benutzer in Unix-Systemen verglichen werden. Dieser Benutzer hat Zugriff auf alle Unterseiten und Einstellungen im System.
Sie können dem System weitere Benutzer hinzufügen. Diese könnten z. B. die Redakteure sein, die für die Erstellung der Inhalte verantwortlich sind, oder die Moderatoren, die entscheiden, ob die hinzugefügten Kommentare veröffentlicht werden.
Wenn Sie einem bestimmten Benutzer eine Berechtigung zuweisen möchten, tun Sie dies indirekt, indem Sie ihm eine Rolle zuweisen. Es gibt keine direkte Verbindung zwischen einem Benutzer und Berechtigungen in Drupal. Es gibt eine Benutzer-Rolle- und eine Rolle-Berechtigung-Verbindung.
Wie man eine Redakteursrolle hinzufügt und die entsprechenden Berechtigungen zuweist
Dies ist wahrscheinlich die häufigste Herausforderung, der man in Drupal begegnet. Sie müssen Benutzern den Zugang zu Ihrem System erlauben, möchten ihre Rechte jedoch nur auf die Inhaltsverwaltung beschränken. Sie möchten ihnen nicht die Rechte geben, die Systemkonfiguration zu ändern oder neue Benutzer hinzuzufügen.
Um dies zu erreichen, befolgen Sie die folgenden Schritte:
- Fügen Sie eine neue Rolle auf der Seite "/admin/people/roles/add/" hinzu.
- Weisen Sie der Rolle die ausgewählten Berechtigungen auf der Seite "/admin/people/permissions/" zu. Für inhaltsbezogene Berechtigungen sehen Sie sich den Abschnitt "Node" an. Unten finden Sie weitere Informationen zur Berechtigungsliste.
- Weisen Sie den ausgewählten Benutzer der neuen Rolle auf der Seite "/admin/people/" zu.
Loggen Sie sich dann in das Konto des ausgewählten Benutzers ein und prüfen Sie, ob er die entsprechenden Berechtigungen hat. Vielleicht müssen Sie sie erweitern oder entziehen. Wenn Sie mit dem Berechtigungssystem von Drupal nicht vertraut sind, ist ein solcher Test mit dem Einloggen in das Benutzerkonto immer empfehlenswert.
Sie müssen das Passwort für das Benutzerkonto, in das Sie sich einloggen möchten, nicht kennen. Sie müssen nur das Modul Masquerade installieren. Damit können Sie sich in das Konto eines beliebigen Benutzers einloggen.
Überblick über die Berechtigungen im Drupal-Core
Wenn Sie zum ersten Mal die Seite "/admin/people/permissions/" betreten, könnten Sie sich ein wenig überfordert fühlen. Dies ist vermutlich die längste Konfigurationsseite in Drupal.
Beginnen wir mit der Tabellenüberschrift. Sie werden im ersten Feld immer das Wort "BERECHTIGUNG" sehen. In den nächsten Zellen der ersten Zeile stehen die Namen der Rollen. Je mehr Rollen Sie hinzufügen (Sie können sie auf der Seite /admin/people/roles/add/ hinzufügen), desto mehr werden Sie in dieser Tabelle sehen.
Wenn Sie die erste Spalte in ihrer Gesamtheit betrachten, werden Sie eine lange Liste von Berechtigungen sehen. Die Berechtigungen sind in Abschnitte unterteilt. Die Abschnitte tragen die Namen der Module. Der Abschnitt "Node", der zuvor erwähnt wurde, heißt so, weil die Berechtigungen in diesem Abschnitt im "node"-Modul definiert sind (Sie finden es auf Ihrem Datenträger im core/modules/node-Verzeichnis).
Einige Abschnitte haben nur eine Berechtigung, z. B. hat der Abschnitt "Block" nur die Berechtigung "Blöcke verwalten". Andere haben viele mehr davon.
Wenn Sie das erste Mal mit den Drupal-Berechtigungseinstellungen arbeiten, schlage ich vor, dass Sie die Namen aller Berechtigungen durchlesen. Schon die Namen erklären, wofür eine bestimmte Berechtigung gedacht ist.
Anonym & Authentifiziert
Es gibt zwei Systemrollen in Drupal, die nicht entfernt werden können:
- Anonymer Benutzer
- Authentifizierter Benutzer
Die erste dieser Rollen ist für alle nicht eingeloggt Benutzer verantwortlich. Wenn Sie zum Beispiel die Möglichkeit einrichten möchten, dass nicht eingeloggte Benutzer Benutzerprofile anzeigen können, aktivieren Sie die Option "Benutzerinformationen anzeigen" in der Spalte "Anonymer Benutzer".
"Authentifizierter Benutzer" ist die Rolle, die allen eingeloggten Benutzern zugewiesen wird. Hier ist es wichtig, das Erbe der Berechtigungen zu verstehen. Wenn Sie einer Rolle die Berechtigung "Authentifizierter Benutzer" zuweisen, dann erhalten alle anderen Rollen (außer der anonymen) sofort diese Berechtigung.
Beispiel: Sie haben die Rolle "Editor" im System. Sie weisen die Berechtigung "Benutzerinformationen anzeigen" der Rolle "Authentifizierter Benutzer" zu. Jeder mit der Rolle "Editor" erhält ebenfalls die Berechtigung, weil sie auch als eingeloggte Benutzer gelten.
Bedenken Sie außerdem, dass wenn Sie eine Berechtigung für die anonyme Rolle (z. B. "Benutzerinformationen anzeigen") aktivieren, aber nicht für den "Authentifizierten Benutzer", die eingeloggten Benutzer keinen Zugriff auf den ausgewählten Bereich ("Benutzerinformationen anzeigen", – sie haben keinen Zugriff auf Benutzerprofile) haben werden.
Merken Sie sich
- In Drupal können Sie eine unbegrenzte Anzahl von Rollen hinzufügen.
- Die Liste der Berechtigungen wird durch Module in modulename.permissions.yml-Dateien definiert (mehr dazu weiter unten im Text).
- Die Rollen "Authentifiziert" und "Anonym" sind separat – wenn Sie eine Option nur für "Anonym" auswählen, erhalten die eingeloggten Benutzer diese Berechtigung nicht.
- Um Berechtigungen zu testen, ist es gut, das Masquerade-Modul zu verwenden.
Eigene Berechtigungen im Code
Manchmal besteht die Notwendigkeit, eigene Berechtigungen zu definieren, z. B. für Verwaltungsseiten, die von neuen Modulen definiert werden, oder um den Zugriff auf die Seiten zu ändern, die im Drupal-Core definiert sind.
Wie man eine Berechtigung definiert
Sie müssen nur die modulename.permissions.yml-Datei im neuen Modul hinzufügen (oder im bestehenden Modul, wenn Sie bereits Ihre eigenen Module erstellt haben). Wenn Sie nicht wissen, wie man eigene Module erstellt, empfehle ich Ihnen, die Website zu besuchen.
Die Berechtigungsdatei ist eine Datei im YML-Format. Ein einfaches Beispiel finden Sie im Popup Message-Modul, direkt hier.
In der Datei wird ein eindeutiger Name für die Berechtigung (z. B. "popup message administration") definiert, und anschließend – die auf der Seite "/admin/people/permissions/" angezeigten Namen. Sie können einen Titel im "title"-Parameter angeben und zusätzlich – eine detailliertere Beschreibung im "description"-Parameter.
Dies reicht aus, um neue Berechtigungen zu definieren. Nach dem Erstellen der Datei und dem Leeren des Caches sehen Sie die neuen Berechtigungen auf der Seite "/admin/people/permissions/".
Wie man eine Berechtigung verwendet
Am häufigsten werden Berechtigungen bei der Definition von Routing verwendet. Sehen Sie sich die Datei an.
Im Abschnitt "requirements" können Sie den Parameter "permission" hinzufügen. Auf diese Weise können Sie definieren, welche Benutzer (oder eher Rollen) mit welcher Berechtigung die im Routing definierte Seite anzeigen können.
Die zweite Methode besteht darin, die Berechtigungen in Ihrem Code zu überprüfen. Das Benutzerobjekt in Drupal hat die Methode "hasPermission". Auf diese Weise können Sie überprüfen, ob ein bestimmter Benutzer über die ausgewählte Berechtigung verfügt.
// Holen Sie sich den aktuellen Benutzer
$user = \Drupal::currentUser();
// Überprüfung der Berechtigung
if ($user->hasPermission('display popup message')) {
// Führe etwas aus.
}
Es lohnt sich, einen Blick auf die hasPermission-Methode hier zu werfen. Wie Sie sehen, wird dort die Benutzer-ID überprüft. Wenn die ID gleich 1 ist, erhält der Benutzer Zugang ohne weitere Überprüfung, ob er die ausgewählten Rollen hat.
Wie man prüft, ob der Benutzer eine Rolle hat
Drupal bietet auch eine fertige Methode, um zu prüfen, ob ein bestimmter Benutzer über eine Rolle mit einem spezifischen Namen verfügt. Nachfolgend finden Sie ein Beispiel, wie Sie dies im Code tun können.
// Holen Sie sich den aktuellen Benutzer
$user = \Drupal::currentUser();
// Benutzer-Entity laden.
$user_entity = \Drupal\user\Entity\User::load($user->id());
// Überprüfung der Berechtigung
if ($user_entity->hasRole('editor')) {
// Führe etwas aus.
}
Zusätzlich gibt es auch Methoden, die mit den authentifizierten und anonymen Rollen zusammenhängen:
- $user-> isAuthenticated();
- $user-> isAnonymous();
Wie man Berechtigungen für Operationen an einer Entität überprüft
Im Anwendungscode können Sie auch die Berechtigungen für Operationen an ausgewählten Entitäten (z. B. Node oder User) überprüfen. Sie können bestimmte Operationen durchführen, z. B. abhängig davon, ob der Benutzer das Recht hat, eine bestimmte Entität zu bearbeiten oder anzuzeigen.
Entitäten in Drupal haben die Methode access($operation = 'view', AccountInterface $account = NULL, $return_as_object = FALSE). Ein einfaches Anwendungsbeispiel finden Sie unten:
$nid = 545;
$node = \Drupal\node\Entity\Node::load($nid);
$user = \Drupal::currentUser();
if ($node->access('edit', $user)) {
// Führe etwas aus
}
Definition von Inhaltsberechtigungen
Drupal ermöglicht die Verwaltung des Zugriffs auf die Anzeige und Bearbeitung auf Ebene eines einzelnen Eintrags (Node). Dieses Thema wurde in unserem anderen Blogbeitrag ausführlich beschrieben. Grzegorz Pietrzak hat dies im Artikel Drupal Node grants beschrieben.
Fertige Module für Drupal im Zusammenhang mit Berechtigungen
Es gibt bereits viele fertige Module, die die Fähigkeiten des Drupal-Cores erweitern. Sie sollten sie sich ansehen, bevor Sie beginnen, Ihre eigenen berechtigungsbezogenen Module zu schreiben.
Unten ist eine Liste einiger ausgewählter Module, die es wert sind, geprüft und getestet zu werden:
- Block Content Permissions
- Block Region Permissions
- Menu Admin per Menu
- Override Node Options
- Menu Item Role Access
- Protected Pages
- Administer Users by Role
- Custom Permissions
- Vocabulary Permissions Per Role
- Disable user 1 edit
Sehen Sie sich auch die Seite an und werfen Sie einen Blick auf andere Module. Vielleicht finden Sie einige von ihnen nützlich.
Zusammenfassung
Drupal ist ein sehr flexibles System. Allein beim Blick auf die Möglichkeiten in Bezug auf Berechtigungen erkennt man die Vielzahl an Konfigurationsmöglichkeiten. Wenn Sie eine große Website mit vielen Editorstufen oder eine interne Anwendung (z. B. ein Intranet-System) erstellen, bei der die Benutzer eingeschränkte Berechtigungen haben müssen, wird Drupal die Aufgabe sehr gut erfüllen.
Wenn Sie Unterstützung von Drupal-Spezialisten zu Berechtigungen oder anderen Themen benötigen, nutzen Sie die Dienstleistungen unserer Drupal-Entwickler.