Drupals node access System


Ich bin gerade ein Modul am Entwickeln, welches ein paar coole Features für Organic Groups beinhaltet. Normalerweise kann man Nodes lediglich in die eigene Gruppe posten. Das ist wohl für die meisten Zwecke auch gut genug. Mit dem Modul og_sendnode (so habe ich es getauft), können jetzt jedoch Nodes an andere Gruppen geschickt werden.

Ein praktisches Beispiel: Ein Projekt, welches aus diversen Gruppen besteht. Drupal wird als File Verwaltungs Tool für die einzelnen Gruppenmitglieder verwendet. Mitglieder erstellen Nodes, welche von den anderen Mitgliedern der Gruppe bearbeitet werden können. Geht also so ein bisschen in Richtung Wiki.

Was jedoch, wenn man etwas für eine andere Gruppe hat? Klaro, man könnte es per E-mail schicken -> old School. Also: Einen Node erstellen und diesen direkt an die Gruppe schicken. Dabei verliert die Gruppe jedoch die Kontrolle über den Node, sprich, sie kann nur noch zuschauen. Die Zielgruppe hingegen kann den Node weiter bearbeiten.

Dort kommen jetzt die hook_node_grants und co ins Spiel.

hook_node_grants($account,$op): Wenn ein Node aufgerufen wird, dann wird dieser Hook aufgerufen. Es wird geschaut, ob die richtige Berechtigung da ist.

hook_node_access_records($node): Wenn ein Node gespeichert wird, dann wird dieser Hook vorher aufgerufen. Es können jetzt verschiedene Grants (Zugriffsberechtigungen) für diesen Node gesetzt werden. Diese werden dann in die Tabelle node_access geschrieben.

Ich blicke zwar schon mehr durch, als vor 2 Stunden, aber bis ins letzte Detail schnalle ich es noch nicht 😉 Auf jeden Fall kann so für jeden Node eine individuelle Berechtigung festgelegt werden, welche sich in Gruppen und realms aufteilen lässt.

Zudem gibt es noch ein Beispiel für die Verwendung.