Access Control List ist ein leichtgewichtige und flexible Klasse für die Zugriffskontrolle.
Die Zugriffskontrolle basiert auf Regeln die immer für eine Rolle, für eine Ressource und für eine Aktion zutreffen. Eine Regeln besagt entweder das die Kombination der drei Paramter (Rolle, Ressource, Aktion) verboten oder erlaubt ist. Jeder der drei Paramter ist dabei optimal, dass heißt zum Beispiel es kann allen Rollen das Lesen verboten werden oder einer Rolle alle Aktionen. Die Rollen-, Ressourcen-, sowie Aktionsnamen können völlig frei vom Benutzer festgelegt werden.
public function addRole ( $role, $parents = null )
Rollen werden über die Methode addRole hinzugefügt. Der erste Parameter gibt den Namen der Role an. Der zweite Parameter ist die Rolle (oder ein Array mit Rollen) von denen die neue Rolle erbt.
$acl -> addRole ( 'guest' ); $acl -> addRole ( 'member', 'guest' );
Sollte eine Rolle mit dem angegebenen Namen bereits existieren oder eine Rolle von der geerbt werden soll nicht existieren wird eine aclException ausgelöst.
public function removeRole ( $role )
Rollen werden über die Methode removeRole entfernt. Alle der Rolle (und deren Erben) zugeordneten Regeln werden dabei gelöscht.
$acl -> removeRole ( 'nil' );
Sollte die Rolle mit dem angegebenen Namen nicht existieren wird eine aclException ausgelöst.
public function hasRole ( $role )
Die Methode gibt true zurück wenn die angegebene Rolle existiert, false wenn nicht.
public function inheritsRole ( $role, $inherit, $direct = false )
Die Methode prüft ob $role von $inherit abstammt. Wenn $direct true ist wird nur eine direkte Verbindung geprüft.
$acl -> inheritsRole ( 'guest', 'member' ); // false $acl -> inheritsRole ( 'member', 'guest' ); // true
public function addRule ( $role, $resources = null, $actions = null, $allow = true )
Beim Hinzufügen einer Regel sind alle Parameter variabel, dass heißt sie können alle null sein. Ressourcen und Aktionen können als Array angegeben werden. In diesem Fall werden für die angegeben Rolle oder alle Rollen für jede angebene Aktion in jedem angebenen Modul die Regeln gesetzt. Der letzte Paramter gibt an ob die Kombination der Parameter als erlaubt oder als verweigert abgespeichert werden soll.
// Gästen das Lesen überall erlauben $acl -> addRule ( 'guest', null, 'read' );
// Mitgliedern das Ändern überall erlauben $acl -> addRule ( 'member', null, array ( 'write', 'change' ) ); // Mitgliedern das Schreiben im Administrationsbereich verbieten // (überschreibt die vorherige Regel) $acl -> addRule ( 'member, 'adminpanel', null, false ); // Der Administrator darf alles. $acl -> addRule ( 'admin', null, null );
public function removeRule ( $role, $resources = null, $actions = null )
Beim Löschen einer Regel gilt der gleiche Syntax wie beim Hinzufügen einer Regel. Löschen bedeutet nicht, dass die Kombination aus Parametern verboten wird sondern, dass eine eventuell gesetzte Regel wieder entfernt wird.
// Der Zugriff auf den Administrationsbereich // ist jetzt wieder für alle Mitglieder gestattet. $acl -> removeRule ( 'member, 'adminpanel', null );
public function isAllowed ( $role = null, $module = null, $action = null )
Die Methode prüft ob die angegeben Kombination von Parametern in dieser Form erlaubt ist. Wenn die Kombination erlaubt ist wird true zurückgegeben, andernfalls false.
$acl -> isAllowed ( 'guest', null, null ); // false $acl -> isAllowed ( 'guest', null, 'read' ); // true $acl -> isAllowed ( 'member', null, 'read' ); // true $acl -> isAllowed ( 'member', null, 'write' ); // true $acl -> isAllowed ( 'admin', null, 'read' ); // true $acl -> isAllowed ( 'admin', null, 'change' ); // true $acl -> isAllowed ( 'admin', null, null ); // true;Nach oben
$acl -> addRole ( 'guest' ); $acl -> addRole ( 'staff', 'guest' ); $acl -> addRole ( 'editor', 'staff' ); $acl -> addRole ( 'administrator' ); $acl -> addRule ( 'guest', null, 'view' ); $acl -> addRule ( 'staff', null, array ( 'edit', 'submit', 'revise' ) ); $acl -> addRule ( 'editor', null, array ( 'publish', 'archive', 'delete' ) ); $acl -> addRule ( 'administrator', null, null ); $acl -> isAllowed ( 'guest', null, 'view') // true $acl -> isAllowed ( 'staff', null, 'publish') // false $acl -> isAllowed ( 'staff', null, 'revise') // true $acl -> isAllowed ( 'editor', null, 'view') // true $acl -> isAllowed ( 'editor', null, 'update') // false $acl -> isAllowed ( 'administrator', null, 'view') // true $acl -> isAllowed ( 'administrator') // true $acl -> isAllowed ( 'administrator', null, 'update') // true>
$acl -> addRole ( 'guest' ); $acl -> addRole ( 'staff', 'guest' ); $acl -> addRole ( 'editor', 'staff' ); $acl -> addRole ( 'administrator' ); $acl -> addRule ( 'guest', null, 'view' ); $acl -> addRule ( 'staff', null, array ( 'edit', 'submit', 'revise' ) ); $acl -> addRule ( 'editor', null, array ( 'publish', 'archive', 'delete' ) ); $acl -> addRule ( 'administrator', null, null ); $acl -> addRole ( 'marketing', 'staff' ); $acl -> addRule ( 'marketing', 'newsletter', array ( 'publish', 'archive' ) ); $acl -> addRule ( 'marketing', 'latest', array ( 'publish', 'archive' ) ); $acl -> addRule ( 'staff', 'latest', 'revise', false ); $acl -> addRule ( null, 'announcement', 'archive', false ); $acl -> isAllowed ( 'staff', 'newsletter', 'publish' ) // false $acl -> isAllowed ( 'marketing', 'newsletter', 'publish' ) // true $acl -> isAllowed ( 'staff', 'latest', 'publish' ) // false $acl -> isAllowed ( 'marketing', 'latest', 'publish' ) // true $acl -> isAllowed ( 'marketing', 'latest', 'archive' ) // true $acl -> isAllowed ( 'staff', 'latest', 'revise' ) // false $acl -> isAllowed ( 'marketing', 'latest', 'revise' ) // false $acl -> isAllowed ( 'editor', 'announcement', 'archive' ) // false $acl -> isAllowed ( 'administrator', 'announcement', 'archive' ) // falseNach oben