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