Für Drupal gibt es ein praktisches Modul namens "Access by Reference". Damit lassen sich komplexe Inhaltsberechtigungen abbilden, die über die standard Permissions hinausgehen.
Wofür 'Access by Ref'?
In meinem Szenario aktuell habe ich zwei Inhaltstypen Device und Content. Ein Device ist immer der Parent für Inhalte. Benutzer sollen einer Abteilung zugewiesen werden und können Devices und Inhalte erstellen und bearbeiten. Wenn der Benutzer ein Device anlegt, dann soll das zu seiner Zugriffsgruppe gehören und alle anderen Benutzer der gleichen Abteilung können die Inhalte ebenfalls bearbeiten. Alle Benutzer dürfen allerdings alle Inhalte sehen, wenn sie veröffentlicht sind.
Gelöst habe ich das über eine Taxonomie, die jeweils ein Referenzfeld an dem Device und am User hat. Erstellt der Benutzer ein Device, dann ist es automatisch seiner Gruppe zugeordnet. Das oben genannte Modul kann dafür konfiguriert werden.
Für die andere Bedingung, dass Benutzer nur die Inhalte unter einem Device mit der gleichen Gruppe bearbeiten können gibt es ebenfalls eine Konfiguration
Das ist alles total cool und nice. Bis man eine View aufmacht, die nur die Inhalte eines Benutzers anzeigen lassen will. Das ist im Modul nicht einfach so vorgesehen, lässt sich aber lösen.
Von hinten durch die Views in's Auge
Das Problem was hier auftaucht ist, dass das Modul keinen Node Access Check in der View machen kann. Die Lösung dafür ist ein Umweg in der View.
Wenn ich alle Devices anzeigen lassen will, die ein Benutzer bearbeiten kann, dann müssen zwei Beziehungen eingerichtet werden.
- Einmal auf den Taxonomie Term, in meinem Fall field_access_groups
- Und auf den Benutzer mit dem Taxonomie Term. Wichtig ist dabei die Referenz zu der Beziehung davor einzustellen
Und das ist auch schon alles, was es braucht, um einem Benutzer nur die Devices anzuzeigen, die auch bearbeitet werden können.