Access Control List

Auf dieser Seite soll ein Überblick der DSAo-Md spezifischen ACL (Access Control List) gegeben werden.

Diese Seite soll keine Erläuterung der Zend-ACL darstellen, diese ist in der Zend Dokumentation dokumentiert.

Zusammenfassung

Element Bedeutung
/devel/data/xml/modules/meta/acl/resources/* ACL-Ressourcen
/sql/acl.sql ACL-Rollen
Dsao_Builder_Acl Initialisiert Zend_Acl-Instanz
Dsao_Application_Resource_Acl Lädt / Initialisiert Zend_Acl-Instanz
Dsao_Filter_Acl Berechtigungsfilter
Dsao_Controller_Action_Helper_AccessControl Prüft Zugangsberechtigung des angemeldeten Benutzers

/devel/data/xml/modules/meta/acl/resources/*

In diesen XML-Dateien sind die ACL-Ressourcen der einzelnen Module nach dem in der Datei resources.dtd abgelegten Schema festgelegt.

Beispiel

Beispiel für einen Controller „xyz“, der nur für Benutzer mit der Rolle „member“ erreichbar sein soll, die Action „xyz::abcAction()“ darf nur von Benutzer mit der Rolle „admin“ benutzt werden. Das Modul „mdl“, in dem sich der Controller befindet, ist für alle zugänglich. Hier die Datei mdl.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources SYSTEM "resources.dtd">
 
<resources>
 
  <resource>
    <id>mdl</id>
    <allow>2</allow> <!-- 2 = Gast; das Modul ist somit für alle einsehbar -->
  </resource>
 
  <resource>
    <id>mdl_xyz</id>
    <deny>2</deny>
    <allow>4</allow> <!-- der Controller ist für Gäste (2) nicht zugänglich, aber für registrierte Mitglieder (4) schon -->
  </resource>
 
  <resource>
    <id>mdl_xyz_abc</id>
    <allow>1</allow>
    <deny>4</deny> <!-- Die Aktion ist, wie gefordert, nur für Administratoren (1) zugänglich -->
  </resource>
 
</resources>

/sql/acl.sql

In der Tabelle acl_role befinden sich die ACL-Rollen. Es werden ID, Name und Elternrollen (wiederum als ID) gespeichert.

Tabellendefinition:

-- Rollen --
DROP TABLE IF EXISTS `acl_role`;
CREATE TABLE IF NOT EXISTS `acl_role` (
  `id`      INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
  `name`    VARCHAR( 20 )     NOT NULL                            COMMENT 'Name',
  `parents` VARCHAR( 255 )    NULL                                COMMENT 'Beerbte Rollen (durch Komma getrennt)',
  INDEX ( `name` ) 
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_unicode_ci      COMMENT = 'ACL-Tabelle für Rollen';

Beispiel:

(1,'admin', NULL), -- Administrator
  • Der erste Parameter gibt die ID an. Diese muss einmalig sein, es dürfen keine zwei Rollen mit der gleichen ID auftreten
  • Der zweite Parameter gibt den Namen der Rollen an
  • Der letzte Parameter gibt an, von welchen Rollen (IDs, durch Komma getrennt) die Berechtigungen geerbt werden (falls keine Berechtigungen geerbt werden, muss hier NULL übergeben werden)

Ein Kommentar ist jeweils wünschenswert.

Dsao_Builder_Acl

Der Builder übernimmt, wie der Name schon sagt, das Bauen eines Zend_Acl-Objekts. Es werden zunächst die Rollen und dann die Ressourcen geladen. Anschließend werden die Berechtigungen gesetzt.

Dsao_Application_Resource_Acl

Diese Klasse sorgt dafür, dass beim Bootstrapping eine Instanz der Klasse Zend_Acl zur Verfügung gestellt wird. Dazu wird diese von der Klasse Dsao_Cache_Loader angefordert, die wiederum ggf. den o.g. Builder zur Initialisierung des Objekts benutzt.

Dsao_Filter_Acl

Dieser Filter erwartet eine Rolle sowie ein Objekt der Klasse Zend_Acl und filtert dann übergebene Arrays von Resourcen im Hinblick auf die Berechtigung der dem Konstruktor übergebenen Rolle. Zurückgegeben wird ein Array von Resourcen, auf die der Benutzer gemäß seiner Rolle Zugriff hat.

Dsao_Controller_Action_Helper_AccessControl

Dieser Action-Helper benutzt eine Instanz der Klasse Zend_Acl und den Filter Dsao_Filter_Acl, um zu entscheiden, ob der Benutzer auf die aufgerufene Seite Zugriff hat.

 
code/acl.txt · Zuletzt geändert: 29.03.2010 11:10 von saviola
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS Driven by DokuWiki