Zend Navigation und RBAC

Ich entwickle eine ZF2-basierte Site. Ich habe eine Hauptnavigation, die unabhängig vom Besucher- / Benutzerstatus gleich bleibt. Es muss eine weitere Komponente / Navigation hinzugefügt werden, die vom Status und der Rolle des Benutzers abhängt. Für einen Besucher sind die Einzelteile

RegistrierenAnmeldungEN (Eigentlich ein Dropdown mit einer anderen verfügbaren Sprache)

Für einen angemeldeten normalen Benutzer wird dies angezeigt

ProfilAusloggenDE (Sprachauswahl wie oben erwähnt)

Und für einige Benutzer mit bestimmten Rollen / Berechtigungen gibt es zusätzliche Elemente

Ich möchte RBAC verwenden, da die Zugriffssteuerungsliste aufgebläht zu sein scheint, und nur um zu überprüfen, ob der aktuell angemeldete Benutzer / die aktuell angemeldete Rolle zusätzliche Elemente enthält, muss ich die vollständige Zugriffssteuerungsliste laden (und wir haben über 15 verschiedene Arten von Rollen).

Ich habe einige Zeit darüber nachgedacht, wie ich dies erreicht habe. Ich habe folgende Ideen.

Ich erstelle einen leeren Navigationscontainer und erstelle eine Fabrik. In der Fabrik greife ich auf die Authentifizierung und den RBAC zu und füge die Seiten abhängig vom Status / der Rolle des Benutzers hinzu.Ich erstelle eine vollständig geladene Navigation mit allen möglichen Seiten und blende dann mit Hilfe von Authentifizierung und RBAC die Seiten aus, die ich nicht anzeigen möchte.Als dritte Option können Sie einen Ansichtshelfer verwenden, der RBAC über ServiceLayer abruft und die Navigation generiert. (Wie inZF2 wie man Tweets im Layout anzeigt undZF2: Fügen Sie der Vorlage ein Anmelde-Widget hinzu.Oder ich kann ein Controller-Plugin oder nur eine Methode in module.php erstellen und das MVC_Render- oder MVC_Dispatch-Ereignis abhören, die gewünschte Navigation generieren und die Ausgabe einer Ansichtsvariablen hinzufügen.

PS: Ich muss einen Teil verwenden, da ich dem Sprachauswahlbereich eine CSS-Klasse hinzufügen muss. Auch die Navigation wird im Layout angezeigt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage