Wer das Modul "Workbench" oder Vergleichbares zur Einrichtung von Workflows in Drupal einsetzt, kommt schnell in die Verlegenheit, dass das Modul keine Möglichkeit bietet, den Zugriff auf Menü-Bereiche abhängig von den Rollenberechtigungen zu begrenzen. Will man z.B. einem Redakteur die Möglichkeit einräumen, nur in einem bestimmten Bereich des Hauptmenüs Einträge für seine Artikel vorzunehmen, so hat man ein Problem. Das verfügbare Drupal-Modul "Menu Admin per Menu" ermöglicht nur, den Zugriff auf das komplette Menu zu begrenzen, nicht auf einen Teilbereich davon.
Eine Recherche ergab, dass es zur Lösung dieses Problems keine speziellen Module gibt. Wenn, dann läßt sich das Problem höchstens mit komplexen generischen Modulen, wie z.B. Rules, lösen.
Ich habe deshalb das Modul menurolerights entwickelt, das es ermöglicht, Regeln für den Zugriff auf einzelne Menuabschnitte beliebiger Menus für beliebige Rollen festzulegen. Damit kann man z.B. dem für Kochrezepte zuständigen Redakteur erlauben, Menüeinträge unterhalb des Eltern-Menüpunkts "Rezepte" beliebig hinzufügen, zu löschen und zu ändern.
Alle dafür erforderlichen Einstellungen werden im Konfigurationsformular des Moduls "Set menu role rights" (menurolerights) vorgenommen.
Abb. 1: Das Konfigurationsformular des Moduls "menurolerights"
Man fügt einfach für ein auswählbares Menü eine Regelbeziehung zwischen einer Rolle und einem Eltern-Menüpunkt hinzu. Der Eltern-Menüpunkt dient als Begrenzer für den berechtigten Bereich. Man kann dann diese Regeln aktivieren und deaktivieren, löschen und eine Notiz hinzufügen. Die Bereiche dürfen sich überlappen.
Ich muss nun, damit diese Regeln Auswirkungen haben, zunächst die allgemeinen Menu-Berechtigungen einstellen. Im folgenden wird davon ausgegangen, dass das Modul "Menu Admin per Menu" zur Verfügung steht. Falls nicht, funktioniert "menurolerights" immer noch, allerdings muss man sich dann für seine Rolle Beschränkungen für alle vorhandenen Menüs überlegen.
Abb. 2: Berechtigungseinstellungen per Module "Menu Admin per Menu"
Das Ergebnis kann man in der folgenden Abbildung erkennen. Der Redakteur zum Beispiel bekommt in seinem Administrationsmenu nur noch die Möglichkeit, auf das Hauptmenü zuzugreifen.
Abb. 3: So sieht der Redakteur seine Einstellmöglichkeiten im Administrationsmenu
Die über das Berechtigungssystem von Drupal so voreingestellten Menüzugriffsmöglichkeiten für die einzelnen Rollen wurden schon oder werden jetzt per Regelsetzung per Konfigurationsformular von "menurolerights" (s. Bild oben) so eingeschränkt, dass nur bestimmte Ausschnitte aus dem betreffenden Menü zugelassen werden.
Ruft dann z.B. der Redakteur die ihm mögliche Menü-Überblicksseite des Hauptmenüs per "admin/structure/menu/manage/main-menu" auf, wird ihm der beschränkte Bereich durch Hervorhebung visualisiert. Die verbotenen Zonen erscheinen blass und enthalten keine Action-Links.
Abb. 4: So werden dem Redakteur im Menu-Überblicksformular seine Einstellmöglichkeiten dargestellt
Versucht er, Menüpunkte aus den ihm zugewiesen Bereichen nach außerhalb zu verschieben, so wird ihm dies verwehrt genauso, wie der umgekehrte Versuch. Innerhalb der erlaubten Bereiche dagegen ist ihm alles erlaubt.
Beim Editieren oder Hinzufügen von Beiträgen wird dem Nutzer standardmäßig im Bearbeitungsformular angeboten, den Artikel unter einem bestimmten Menu-Punkt einzusortieren ("Provide a menu link"). Dort werden nach Definition einer Regel im Modul "menurolerights" nur noch die "erlaubten" Menupunkte angeboten, im folgenden Bild dargestellt für die Rolle "Designer".
Abb. 5: So werden dem Designer im Bearbeitungsformular die ihm zugewiesenen Menupunkte angeboten
Damit steht eine sehr vielseitige Möglichkeit zur Verfügung, die Aktionsmöglichkeiten von Nutzern einzustellen vor allem in Kombination meines Moduls 'menurolerights' mit dem "Workbench"-Modul und dem Modul "Menu admin per menu". Im Grunde fehlt jetzt nichts mehr, um beliebige Workflows zu definieren und dabei alle Aspekte der Administrationsoberfläche einzubeziehen.
Das Modul kann man sich von meiner Repository-Seite herunterladen oder für die ganz Fixen:
git clone http://gitpub.stageanddeploy.com/menurolerights.git drush en menurolerights -y
Bei mir läuft das Modul einwandfrei, trotzdem sollte man berücksichtigen, dass es sich noch um eine wenig getestete Version handelt.