Hauptbestandteile
- PluginResource Libcrunch_Application_Resource_Acl. Erstellt aus der entsprechenden Konfiguration das ACL-Object.
- FrontController-Plugin Libcrunch_Controller_Plugin_Acl: Kontrolliert den Zugriff auf Controller/Aktionen.
PluginResource
Erstellt ACL-Objekt aus der Konfiguration. Auf das umgebende XML-Gerüst wird zu Gunsten der Übersicht verzichtet. Die Konfiguration besteht grob aus 4 Teilen: resource definiert einzelne Resourcen, role definiert einzelne Rollen und letzten Endes rule einzelne Rules. Jedes Teil kann mehrfach auftauchen [1]. plugin enthält Optionen für das ACL-Plugin. Ist es definiert, wird das Plugin zudem im Front-Kontroller registriert.
<resource> <resourceid>ID der Resource</resourceid> <parent>Andere ID</parent> </resource> <role> <roleid>ID der Rolle</roleid> <parent>Andere ID </parent></role> <rule> <role>Rolle</role> <resource>Resource</resource> <privilege>get</privilege> <type>allow</type> </rule> <plugin> <module>Modulename</module> <model>Modelname</model> <defaultguest>roleId</defaultguest> <defaultuser>roleId</defaultuser> </plugin>
Die Abschnitt resource und role definieren die einzelnen Rollen bzw Resourcen. Der Werte für die IDs sind beliebig und abhängig von Zend_Acl selbst, bestimmte ResourceIDs haben für das Plugin jedoch eine Sonderbedeutung (siehe Plugin). Bevor eine Rolle oder eine Resource als Parent einer anderen verwendet werden kann, muss es definiert werden. Jede Rolle oder Resource, die in einer Regel erwähnt werden, müssen definiert sein. Bei den Rollen ist die Angabe parent mehrfach erlaubt, ebenso wie für Rollen, Resourcen und Privilegien bei den Regeln. Die Privilegien sind beliebig, “get” und “post” werden vordefiniert vom Plugin beachtet (siehe Plugin). Der Typ ist einer der Werte “allow”, “deny”, “type_allow” oder “type_deny”. Alternativ können auch die Tags allow oder deny jeweils mit boolschen Werte verwendet werden. Sind mehrere definiert, hat type Vorrang vor allow und dies Vorrang vor deny. Fehlen bei einer Regel resource, role, privilege wird implizit null angenommen. Fehlt type wird “deny” verwendet.
Der plugin Abschnitt enthält Optionen für das Plugin. module und model definieren das Model, von wo der aktuell angemeldete Benutzer (oder null) bezogen werden soll. Das Model muss Libcrunch_Acl_UserRoleInterface implementieren. defaultUser enthält die RoleID, die statt null verwendet werden soll, bzw defaultGuest ebenso, wenn der Benutzer nicht angemeldet ist. Fehlt eines oder beide wird weiterhin null als RoleID verwendet.
Das Plugin
Das Plugin testet in routeShutdown(), ob der Benutzer für die aufgerufene Aktion die nötigen Rechte hat. Dazu nutzt es spezielle ResourceIDs, die jeweils mit einem Schrägstrich / und der URI nachempfunden sind. So bezeichnet die ResourceID /default/index/index die Index-Aktion vom Index-Kontroller des Default-Moduls. Fehlen einzelne Resourcen, wird versucht die übergeordnete aufzurufen: /default/index/index –> /default/index –> /default –> / –> null.
Als Privileg beachtet das Plugin die Werte “get” und “post”. Man muss allerdings beachten, dass “post” implizit “get” einschließt. So erlaubt eine Regel für “post”=allow ebenso Get-Request. Eine anderslautende Regel für “get” wird dabei ignoriert. Man kann “post” als “read/write” und “get” als “read-only” betrachten.
Sollte eine Zugriff nicht erlaubt sein, ändert das Plugin das Ziel des aktuellen Requests;
- /default/error/e401, falls der Benutzer nicht angemeldet ist.
- /default/error/e403, falls der Benutzer angemeldet ist.
- /default/error/e404, wenn die Modul-Bootstrap des Ziel-Moduls Libcrunch_Application_Module_Bootstrap implementiert und die Methode hasActionMethod() für die Kontroller-Aktion-Methode-Kombination zugibt, dass sie nicht existiert [2].
Das Default-Modul ist pauschal von Restriktionen befreit.
Notes
[1] Hier kann es zu Schwierigkeiten bei der Verwendung von INI-Dateien geben.
[2] Man sollte hier beachten, dass diese Methode nur von der implementierenden Modul-Bootstrap abhängt, sie prüft nicht selbstständig die Kontroller oder reflektiert sie sogar. Das bedeutet, dass möglicherweise zu einer unpassenden Fehlerseite umgeleitet wird.
RSS
Facebook
twitter