Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Benutzerhandbuch › Fortgeschrittene › Tutorials & How To's - Tipps & Tricks › Zugriffsbeschränkungen für Nodes - eine Übersicht der Möglichkeiten ›

Praktischer - dynamische rollenbasierte Zugriffe

Eingetragen von Exterior (2903) am 10.07.2010 - 00:24 Uhr in
  • Drupal 6.x

Auf dieser Seite wird erklärt, wie man beim Erstellen eines Nodes die Benutzerrollen für bestimmte Rechte auswählen kann

Manchmal reicht es nicht oder es ist nicht sinnvoll, bestimmten Rollen starr die Rechte für einen Inhaltstyp zuzuweisen.

Beispiel:
Man hat einen News-Bereich und die Rollen "Mitglieder", "Vorstand", "Ausbilder", "Verwalter". Nun kann es vorkommen, dass man News schreiben will, die nur für den Vorstand gedacht sind. Ok, macht man eben einen extra Inhaltstyp. Aber wenn es auch News gibt, die nur Ausbilder lesen sollen? Oder nur Ausbilder und Verwalter? Oder nur Verwalter und der Vorstand? Wäre es nicht praktisch, wenn man beim Erstellen des Nodes festlegen könnte "Dieser Node soll nur von den Rollen Vorstand und Verwalter gesehen werden"?

Das geht. Und nichtmal sonderlich schwer:

Die Module

Diese Aufgabenstellung ist etwas komplexer, sodass wir auf ein paar Module mehr zurückgreifen müssen:

  • CCK
  • Role Reference
  • Node Privacy by Role
  • Rules

Kurze Erklärung:
CCK dürfte jedem bekannt und von vielen benutzt sein. Role Reference arbeitet ähnlich wie Node Reference oder User Reference, man kann damit im Node bestimmte Rollen referenzieren.
Node Privacy by Role funktioniert ähnlich wie Content Access, es kann den Zugriff auf Inhaltstypen oder einzelne Nodes auf Basis der Benutzerrollen beschränken. Da die Zugriffsarbeit also von NPbR erledigt wird, benötigen wir in dieser speziellen Aufgabe nicht zwingend das Modul Content Access. Es ist allerdings problemlos möglich, beide parallel einzusetzen und für eine Art der Aufgaben Content Access zu benutzen und z.B. für diese spezielle Aufgabe hier NPbR zu verwenden.

Das Besondere an Node Privacy by Role ist, dass wir damit später die Zugriffsrechte auf Basis einen Role Reference-Feldes setzen können, was mit Content Access nicht geht.
Letztendlich benötigen wir Rules, um die Zugriffsrechte für einen neuen Node automatisch zu setzen.

Zum Zeitpunkt des Verfassens dieser Buchseiten werden folgende Versionen benutzt:

Drupal --> 6.17 (deutsche Version von DC)
CCK --> 6.x-2.7
Role Reference --> 6.x-1.2
Node Privacy by Role --> 6.x-1.5
Rules --> 6.x-1.2

Vorbereitung und Installation

Auch hier ist dieser Punkt recht einfach - Module runterladen, entpacken, nach sites/all/modules hochladen und aktivieren.

Nun kommen die einzelnen Arbeitsschritte:

1. Inhaltstyp bearbeiten und anpassen

Ich nenne meinen Inhaltstyp einmal "Test-Typ".

Zuerst müssen wir den gewünschten Inhaltstyp anpassen. Also gehen wir nach admin/content/types und klicken beim gewünschten Inhaltstyp auf "Bearbeiten". Auf der darauf folgenden Seite finden wir etwas weiter unten den Punkt "Node privacy by role".
Wenn wir darauf klicken, öffnet sich eine Box, in der wir ähnliche Rechte-Anpassungen vornehmen können wir zuvor schon bei Content Access. Man kann also bei dem gewünschten Zugriffsrecht (z.B. "Default View Permissions") eine oder mehrere Rollen auswählen. Allerdings gibt es hier nicht die Aufteilung in "alle" und "eigene", sondern die Rechte gelten immer für alle Nodes dieses Typs.

Hier könnte man also die Standardrechte für den Inhaltstyp setzen. Wir richten es nun so ein, dass keine Haken gesetzt sind, kein einziger. Damit hat niemand irgendwelche Leserechte oder ähnliches. Das hat so seine Richtigkeit, weil die Zugriffsrechte später komplett auf Basis des Role-Reference-Feldes vergeben werden.

Standardmäßig dürften auch gar keine Haken drin stehen, also einfach versichern, ob das stimmt und dann kommt Role Reference ins Spiel.

Dazu klicken wir oben auf den Reiter "Felder verwalten", um ein neues CCK-Feld anzulegen. Bezeichnung und Feldname sind frei wählbar, ich nehme einfach mal als Bezeichnung "Sichtbarkeit für Benutzerrollen" und als Feldname "field_rolereference". Dann nimmt man als Datentyp "Role Reference" und als Darstellungs nimmt man am besten "Ankreuzfelder / Auswahlknöpfe" --> ich möchte gern die entsprechenden Rollen einfach ankreuzen (allerdings funktioniert es auch mit den anderen Darstellungen).

Weiter zu den Einstellungen des Feldes:
Hilfe-Text, Standard-Wert und ob erforderlich oder nicht - euch überlassen. Bedenkt lediglich, wenn ihr "Erforderlich" nicht anwählt und keinen Standardwert angebt, kann man ,ohne eine Benutzerrolle zu wählen, einen Node speichern - den dann niemand sehen kann, weil wir bei den Default-Permissions alle Haken entfernt haben.

Auch die Anzahl der Werte ist euch überlassen. Wählt ihr hier "1" aus, bekommt ihr Radiobuttons (diese runden Felder, in die man einen Punkt setzen kann) und könnt nur eine Rolle auswählen. Alles andere resultiert in Checkboxen, mit denen ihr ihr die gewünschten Gruppen "anhaken" könnt.

Unter der Anzahl finder ihr die "Roles that can be referenced:". Dort könnt ihr anwählen, welche Rollen in dem Role Reference-Feld erscheinen sollen. Rollen, die hier nicht ausgewählt werden, können später nicht angewählt werden und bekommen die Nodes nie zu Gesicht. Wenn ihr also 10 Rollen habt und nur 4 Rollen kommen in Frage, den Inhaltstyp zu lesen - dann wählt diese 4 Rollen an.

Wie auch bei User Reference kann man sich eine View erstellen, welche nach bestimmten Kriterien bestimmte Benutzerrollen ausgibt und diese View kann man dann für die Role Reference-Ausgabe verwenden. Dann wird die gewählte Einstellung bei "Roles that can be referenced:" überschrieben und stattdessen wird die View verwendet. Für unsere Zwecke hier reicht aber die normale Einstellung.

Speichern und fertig ist Schritt 1.

2. Mit Rules die Zugriffsrechte setzen

Nun müssen wir es so einrichten, dass beim Speichern eines Nodes die Zugriffsrechte anhand des Role Reference-Feldes gesetzt werden.

Dazu rufen wir admin/rules/trigger auf und klicken auf "Neue Regel hinzufügen". Die Bezeichnung kann man frei wählen, als Ereignis nehmen wir "Nach dem Speichern von neuem Inhalt". Ob man der Regel eine Kategorie hinzufügt, kann man selbst entscheiden. Lohnt sich evtl. wenn man viele Regeln hat.
Man sollte auch beachten, dass ein Haken bei "Diese Regel ist aktiv und soll ausgewertet werden, wenn das zugehörige Ereignis stattfindet." gesetzt ist.

Nun klicken wir auf "Änderungen speichern" und gehen zur nächsten Seite.

Dort haben wir nun unter "Regel-Elemente" zwei Bereiche:

ON
--> Hier kommen Bedingungen rein. Die Regel-Aktionen werden nur ausgeführt, wenn diese Bedingungen erfüllt sind

DO
--> Hier werden die auszuführenden Aktionen eingetragen

Als erstes klicken wir auf "Bedingung hinzufügen" und wählen auf der nächsten Seite die Bedingung "Inhalt hat den Typ" aus. Danach kann man noch auswählen, für welche Inhaltstypen die Regel ausgeführt werden soll. Also wählen wir "Test-Typ" aus (wenn man STRG gedrückt hält, kann man mehrere Typen wählen) und klickt auf speichern.

Nun kann man noch weitere Bedingungen hinzufügen, aber für unsere Aufgabe hier reicht dies erstmal.

Also klicken wir auf "Aktion hinzufügen". Auf der nächsten Seite wählen wir die Aktion "Change permissions based on rolereference field" (die Aktion findet sich unter dem Gliederungspunkt "Node") und gehen zur nächsten Seite.

Dort lassen wir den Haken bei "Änderungen dauerhaft übernehmen".
Bei den "Default Permissions" lassen wir alles, wie es ist. Unter "New permission" wählt man das gewünschte Role Reference-Feld (in unserem Falle also "field_rolereference") und wählen darunter die zuzuweisenden Berechtigungen. Wir setzen einen Haken bei "Anzeigen".

Weiter unten kann man noch die Einstellungen für den Nodeautor ändern. Wenn also ein User der Rolle "Vorstand" einen Node verfasst und für die Sichtbarkeit nur die Rollen "Ausbilder" und "Verwalter" auswählt, könnte er seinen eigenen Node nach dem Speichern nicht mehr sehen (weil er eben nicht zu "Ausbilder" und "Verwalter" gehört). Wenn man das umgehen will, kann man an dieser Stelle noch die gewünschten Rechte für den Autor ergänzen.

Nun speichern wir das ganze und sind im Grunde fertig. Jetzt kann man einen Inhalt erstellen, die gewünschten Rollen auswählen und nur diese können dann den Node sehen.

Durch den Haken bei "Änderungen dauerhaft übernehmen" müssten eigentlich Änderungen an dem Role Reference-Feld übernommen werden. Das heißt, wenn man nachträglich den Node bearbeitet und die Rollen ändert (z.B. zusätzlich zu Ausbildern und Verwaltern noch "Vorstand" auswählt), wird die erstellte Rule nicht ausgeführt (da sie nur beim Erstellen neuen Inhalts aktiv wird) und trotzdem können fortan auch Leute der Rolle Vorstand den Node sehen - soweit die Theorie.

Ich musste feststellen, dass das ganze mit "Änderungen dauerhaft übernehmen" nicht immer so klappt, wie es soll. Also kann man auch auf Nummer sicher gehen:
Einfach noch eine Regel erstellen, welche exakt den gleichen Inhalt hat, wie die erste, allerdings wählen wir als Ereignis nicht "Nach dem Speichern von neuem Inhalt" sondern "Nach dem Aktualisieren bestehenden Inhalts" aus und schon ist das Problem gelöst.

Zusatz

Eine Sache muss man allerdings beachten bzw. bedenken:
Man kann pro Role Reference-Feld in einer Rule nur einen Berechtigungs-Satz speichern. Das heißt, alle Rollen eines Role-Reference-Feldes bekommen die gleichen Rechte zugewiesen.

Wenn man es also z.B. einen Inhalt erstellen und auswählen will, dass die Rolle "Vorstand" den Node lesen darf und die Rolle "Verwalter" ihn lesen und bearbeiten darf, kommt man nicht um ein zweites Role-Reference-Feld herum.

In einem Feld kann man allen gewählten Rollen Leserechte geben, in einem zweiten Feld gibt man allen gewählten Rollen Bearbeitungs-Rechte. Im höchsten Fall kommt also noch ein drittes Feld mit Lösch-Rechten dazu.

Alle drei Felder muss man dann einzeln auswerten. Allerdings kann man das alles in der selben Rule machen.
Man fügt einfach eine weitere Aktion hinzu, wählt abermals "Change permissions based on rolereference field" und wählt diesmal das zweite Role-Reference-Feld und vergibt die entsprechenden Rechte.
(und macht das ganze evtl. noch ein drittes mal, wenn man drei Role-Reference-Felder hat)

"Schlimmsten Falls" hat man also drei Felder ("field_rolereference_view", "field_rolereference_edit", "field_rolereference_delete") und drei Aktionen in der Rule (Berechtigungen für die Felder: rolereference_view -> Anzeigen; rolereference_edit -> Bearbeiten; rolereference_delete -> Löschen)

Damit kann man dann völlig frei beim Node Erstellen den einzelnen Rollen die gewünschten Rechte zuweisen.

Auf diesen Zusatz ist man aber nur angewiesen, wenn man anhand der Role Reference verschiedenen Rollen verschiedene Rechte geben will!
Wenn man einfach nur möchte, dass die gewählten Rollen den Node sehen können, reicht ein einzelnes Feld mit der obigen Beschreibung.

Damit ist man nun völlig flexibel, welche Rollen welche Nodes sehen dürfen.

Wichtig:

  • Wenn man "Node Privacy by Role" aktiviert, darf man auch hier nicht vergessen, die nötigen default-Rechte zu vergeben. Zwar sollen bei dem Inhaltstyp für die Role Reference alle Defalut Permissions entfernt, aber wenn man das Modul aktiviert, stehen standardmäßig alle Default Permission für alle Inhaltstypen auf false. Man darf also nicht vergessen, für die restlichen Inhaltstypen die Zugriffsrechte zu setzen!

  • Sollte man parallel zu Node Privacy by Role noch Content Access verwenden, kann man für alle anderen Inhaltstypen Content Access verwenden. Das heißt, wenn die Default Permissions von Node Privacy by Role für einen Inhaltstyp alle deaktiviert sind (und somit niemand den Node sehen könnte), jedoch Rechte bei Content Access für diesen Inhaltstypen gesetzt sind, dann gelten die Rechte von Content Access trotzdem und die dort gewählten Rollen haben die entsprechenden Rollen. Das bedeutet allerdings auch, dass man alle Rechte von Content Access für den Inhaltstyp mit Role Reference entfernen muss.
‹ Einstieg - Grundlegende rollenbasierte Zugriffe nach oben Ich will es ganz genau - Zugriffsrechte für einzelne User ›

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Tag 7 Stunden
  • Hey danke
    vor 2 Tagen 2 Stunden
  • Update: jetzt gibt's ein
    vor 2 Tagen 20 Stunden
  • Hallo, im Prinzip habe ich
    vor 1 Woche 6 Stunden
  • Da scheint die Terminologie
    vor 1 Woche 9 Stunden
  • Kannst doch auch alles direkt
    vor 1 Woche 4 Tagen
  • In der entsprechenden View
    vor 1 Woche 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 1 Woche 4 Tagen
  • gelöst
    vor 4 Wochen 1 Tag
  • Ja natürlich. Dass ist etwas,
    vor 4 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20449

Neue User:

  • Mroppoofpaync
  • 4aficiona2
  • AppBuilder

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 19 Gäste online.

DrupalCenter durchsuchen:

Benutzerhandbuch

  • FAQ - Häufig gestellte Fragen.
  • Links & Downloads
  • Über Drupalcenter.de und das deutschsprachige Benutzerhandbuch
  • Über Drupal
  • Einsteiger
  • Fortgeschrittene
    • Best Practice - Drupal Sites - Guidelines
    • Die beliebtesten Themes und Module
    • Tutorials & How To's - Tipps & Tricks
      • Kurztipps - Dinge die Stunden sparen können.
      • Notfallpläne - Tipps die Deine Drupalinstallation retten können
      • Anleitung zur Erstellung eines einfachen Kontaktformulars
      • Arbeiten mit dem Drupal Taxonomie-System [beinhaltet veraltete Inhalte]
      • Bearbeiten-Tab zu jeden Block hinzufügen
      • Block View mit Argument
      • Das Tagebuch einer Site
      • Drupal 6 - Automatisch unterschiedliche Bildgröße bei Teaser und Artikel
      • Drupal 6 - Eigene CSS Datei in ein Theme integrieren
      • Drupal 6 - Einfache Bildergalerie mit Image und Lightbox2
      • Drupal 6 - Einrichten eines Kalenders
      • Drupal 6 - Google Adsense ohne Zusatzmodul einbinden
      • Drupal 6 - Hauptnavigation mit DropDown Effekt ab Ebene Zwei
      • Drupal 6 - ImageMagick mit XAMPP Lite nutzen
      • Drupal 6 - Imagefield mit Imagecache und Colorbox
      • Drupal 6 - Installation FCK Editor
      • Drupal 6 - Installieren der WYSIWYG API inkl. Editoren
      • Drupal 7: mehrere Bilder in Node: 1 Bild in Anrisstext
      • Drupal Code Highlighting in Redmine Projektarchiv (CodeRay)
      • Drupal Theming: JavaScript einhängen in Abhängigkeit von Page-Variablen
      • Drush - Das Schweizermesser für Drupal auf Kommandozeile
      • Einfaches und erfolgreiches Patchen unter Windows
      • Eingabeformat & Inputfilter
      • Einrichten eines einfachen, statischen Menüsystems
      • Erstellen von Patches
      • Gallery mit CCK und Views erstellen (Drupal 5)
      • Header image Modul einrichten
      • Inhaltsübersicht für einen User mit einem View erstellen
      • Javascript und CSS-Dateien einbinden
      • Kontaktformular mit Jquery aufwerten
      • Leitfaden zur Erstellung von Suchmaschinenoptimierten Drupal-Sites
      • Mac OSX - Backupskript für Websites auf MAMP
      • Module updaten via Shell auf Windows
      • Module übersetzen
      • Perl-Script zum Erzeugen einer statischen Kopie einer Drupal-Website
      • Portierung eine Themes von openwebdesign.org
      • Prozentbalken bei Views (Balkendiagramm)
      • Themen eines Node-Formulars
      • Titel mit Stil
      • Umkreissuche mit Location- und Views-Modul
      • Usergalerie mit ImageCache, CCK, Views + Thickbox
      • Userprofil mit Usernodes erstellen
      • Validierung von Usereingaben bei Nodes
      • Variation vom Showroom auf drupalcenter.de
      • View mit Eingabeformular für neue Beiträge
      • WebSVN mit Drupal Code Highlighting
      • Zusätzliche Submit-Schaltfläche in Node-Formularen
      • i18n Language Switcher Block, die Links mit den Flaggen themen
      • ui.slider als Ersatz für den Ajax-Pager von Views
      • Zugriffsbeschränkungen für Nodes - eine Übersicht der Möglichkeiten
        • Einstieg - Grundlegende rollenbasierte Zugriffe
        • Praktischer - dynamische rollenbasierte Zugriffe
        • Ich will es ganz genau - Zugriffsrechte für einzelne User
        • Mal ganz anders - Zugriffsrechte nur für Nodeautor und Autor eines referenzierten Nodes
        • Sonstige Module für Zugriffsrechte
  • Entwicklung von Modulen und Themes
  • Drupalcenters Community
  • Drupal 7 Video-Trainings (Deutsch)
  • Drupal-Testumgebung erstellen
  • Drupal 6 Module
  • Drupal 7 Module
  • Drupal Screencasts auf deutsch
  • Archiv

Das Copyright des deutschsprachigen Drupal-Benutzerhandbuches unterliegt den jeweiligen Autoren. Übersetzungen des englischsprachigen Drupal-Benutzerhandbuches unterliegen der Creative Commons License, Attribution-ShareAlike 2.0.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association