PageRenderTime 26ms CodeModel.GetById 16ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/documentation/manual/de/module_specs/Zend_Acl-Advanced.xml

https://github.com/decaoz/zf1
XML | 103 lines | 89 code | 12 blank | 2 comment | 0 complexity | 9bfb0a064d819d4f6e2c58165a1da70d MD5 | raw file
  1<?xml version="1.0" encoding="UTF-8"?>
  2<!-- EN-Revision: 24249 -->
  3<!-- Reviewed: 20763 -->
  4<sect1 id="zend.acl.advanced">
  5    <title>Fortgeschrittene Verwendung</title>
  6
  7    <sect2 id="zend.acl.advanced.storing">
  8        <title>Dauerhafte Speicherung von ACL-Daten</title>
  9
 10        <para>
 11            <classname>Zend_Acl</classname> wurde so entwickelt, dass keine spezielle Backend
 12            Technologie benötigt wird, wie z.B. eine Datenbank oder ein Cache Server, um die
 13            <acronym>ACL</acronym>-Daten zu speichern. Ihre vollständige
 14            <acronym>PHP</acronym>-Implementation ermöglicht angepasste Administrationstools, die relativ
 15            einfach und flexibel auf <classname>Zend_Acl</classname> aufbauen. Viele Situationen erfordern
 16            eine interaktive Wartung der <acronym>ACL</acronym> und <classname>Zend_Acl</classname>
 17            stellt Methoden für das Einrichten und Abfragen der Zugriffskontrolle einer Anwendung.
 18        </para>
 19
 20        <para>
 21            Die Speicherung der <acronym>ACL</acronym>-Daten ist deshalb die Aufgabe des
 22            Entwicklers, da sich die Anwendungsfälle für verschiedene Situationen erwartungsgemäß
 23            stark unterscheiden. Da <classname>Zend_Acl</classname> serialisierbar ist, können
 24            <acronym>ACL</acronym>-Objekte mit der <acronym>PHP</acronym>-Funktion <ulink
 25                url="http://php.net/serialize"><methodname>serialize()</methodname></ulink>
 26            serialisiert werden und das Ergebnis kann überall gespeichert werden, wo es der
 27            Entwickler möchte, wie z.B. in einer Datei, in einer Datenbank oder mit einem
 28            Cache-Mechanismus.
 29        </para>
 30    </sect2>
 31
 32    <sect2 id="zend.acl.advanced.assertions">
 33        <title>Schreiben von bedingten ACL-Regeln mit Zusicherungen</title>
 34
 35        <para>
 36            Manchmal soll eine Regel für das Erlauben oder Verbieten des Zugriffs auf eine
 37            Ressource nicht absolut sein, sondern von verschiedenen Kriterien abhängen. Nehmen
 38            wir zum Beispiel an, dass ein bestimmter Zugriff erlaubt sei, aber nur zwischen
 39            08:00 und 17:00 Uhr. Ein anderes Beispiel könnte sein, dass der Zugriff verboten wird,
 40            weil eine Anfrage von einer bestimmten IP-Adresse kommt, die als Missbrauchsquelle
 41            markiert worden ist. <classname>Zend_Acl</classname> bietet eine eingebaute
 42            Unterstützung für die Implementierung von Regeln, die auf Bedingungen basieren, die der
 43            Entwickler benötigt.
 44        </para>
 45
 46        <para>
 47            <classname>Zend_Acl</classname> bietet Unterstützung für bedingte Regeln mit dem
 48            <classname>Zend_Acl_Assert_Interface</classname>. Um das Regelzusicherungsinterface
 49            benutzen zu können, schreibt der Entwickler eine Klasse, welche die
 50            Methode <methodname>assert()</methodname> des Interfaces implementiert:
 51        </para>
 52
 53        <programlisting language="php"><![CDATA[
 54class CleanIPAssertion implements Zend_Acl_Assert_Interface
 55{
 56    public function assert(Zend_Acl $acl,
 57                           Zend_Acl_Role_Interface $role = null,
 58                           Zend_Acl_Resource_Interface $resource = null,
 59                           $privilege = null)
 60    {
 61        return $this->_isCleanIP($_SERVER['REMOTE_ADDR']);
 62    }
 63
 64    protected function _isCleanIP($ip)
 65    {
 66        // ...
 67    }
 68}
 69]]></programlisting>
 70
 71        <para>
 72            Sobald eine Zusicherungsklasse verfügbar ist, muss der Entwickler eine Instanz dieser
 73            Zusicherungsklasse bei der Zuordnung bedingter Regeln übergeben. Eine Regel, die mit
 74            einer Zusicherung angelegt wird, wird nur angewendet, wenn die Zusicherungsmethode
 75            <constant>TRUE</constant> zurück gibt.
 76        </para>
 77
 78        <programlisting language="php"><![CDATA[
 79$acl = new Zend_Acl();
 80$acl->allow(null, null, null, new CleanIPAssertion());
 81]]></programlisting>
 82
 83        <para>
 84            Der obige Code legt eine bedingte Erlaubnisregel an, die den Zugriff für alle Rechte
 85            auf alles und von jedem erlaubt, außer wenn die anfordernde IP auf einer "Blacklist"
 86            ist. Wenn die Anfrage von einer IP kommt, die nicht als "sauber" betrachtet wird, wird
 87            die Erlaubnisregel nicht angewandt. Da die Regel auf alle Rollen, alle Ressourcen und
 88            alle Rechte zutrifft, würde eine "unsaubere" IP zu einem Zugriffsverbot führen. Dies
 89            ist ein besonderer Fall und es sollte verstanden werden, dass in allen anderen Fällen
 90            (d.h. wenn eine spezielle Rolle, Ressource oder Recht für die Regel spezifiziert wird)
 91            eine fehlerhafte Zusicherung dazu führt, dass die Regel nicht angewandt wird und andere
 92            Regeln verwendet werden um zu ermitteln, ob der Zugriff erlaubt oder verboten ist.
 93        </para>
 94
 95        <para>
 96            Der Methode <methodname>assert()</methodname> eines Zusicherungsobjektes werden die
 97            <acronym>ACL</acronym>, Rolle, Ressource und die Rechte übergeben, auf welche die
 98            Autorisierungsabfrage (d.h., <methodname>isAllowed()</methodname>) passt, um den
 99            Kontext für die Zusicherungsklasse bereit zu stellen, um die Bedingungen zu ermitteln wo
100            erforderlich.
101        </para>
102    </sect2>
103</sect1>