Zend_Acl-Advanced.xml 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <sect1 id="zend.acl.advanced">
  2. <title>Gevorderd gebruik</title>
  3. <sect2 id="zend.acl.advanced.storing">
  4. <title>Het opslaan van ACL data voor langere duur</title>
  5. <para>
  6. Zend_Acl is zo ontworpen dat het geen aparte achterliggende technologie zoals een database
  7. of een cache server voor het opslaan van ACL data nodig heeft. De complete PHP implementatie
  8. maakt het mogelijk om aangepaste administratie programma's te maken, gebouwd op Zend_Acl met
  9. relatief gemak en flexibiliteit. Veel situaties vereisen een vorm van interactief onderhoud
  10. van de ACL en Zend_Acl levert methodes om dit op te zetten en het raadplegen van, de
  11. toegangscontrole van een applicatie.
  12. </para>
  13. <para>
  14. Het opslaan van de ACL Data is daarom overgelaten als een taak voor de ontwikkelaar, want de
  15. verwachting is dat de gebruikersprocessen veel variëren voor de verschillende situaties.
  16. Omdat Zend_Acl te ordenen is, kan een ACL object geordend worden met de PHP functie
  17. <ulink url="http://php.net/serialize"><code>serialize()</code></ulink> en het resultaat kan worden
  18. opgeslagen waar de ontwikkelaar dat wenst, zoals een bestand, database of een caching mechanisme.
  19. </para>
  20. </sect2>
  21. <sect2 id="zend.acl.advanced.assertions">
  22. <title>Schrijven van conditionele ACL regels met een vereising</title>
  23. <para>
  24. Soms is een regel voor het toestaan of weigeren van een Rol om een Bron te gebruiken niet absoluut, maar
  25. hangt dit af van een aantal criteria. Als voorbeeld, stel dat iets moet worden toegestaan, maar
  26. alleen tussen 8:00 en 17:00. Een ander voorbeeld is het weigeren van toegang omdat het verzoek komt van
  27. een IP adres die gemarkeerd is als een bron van misbruik. Zend_Acl heeft een ingebouwde ondersteuning om
  28. regels, gebaseerd op wat voor condities de ontwikkelaar nodig heeft, te implementeren.
  29. </para>
  30. <para>
  31. Zend_Acl levert ondersteuning voor conditionele regels met <code>Zend_Acl_Assert_Interface</code>.
  32. Om de regel vereising interface te gebruiken, schrijft de ontwikkelaar een class die de
  33. <code>assert()</code> methode van de interface implementeerd.
  34. </para>
  35. <programlisting role="php"><![CDATA[<?php
  36. require_once 'Zend/Acl/Assert/Interface.php';
  37. class schoonIPvereising implements Zend_Acl_Assert_Interface
  38. {
  39. public function assert(Zend_Acl $acl, Zend_Acl_Role_Interface $role = null,
  40. Zend_Acl_Resource_Interface $resource = null, $privilege = null)
  41. {
  42. return $this->_isEenSchoonIP($_SERVER['REMOTE_ADDR']);
  43. }
  44. protected function _isEenSchoonIP($ip)
  45. {
  46. // ...
  47. }
  48. }]]>
  49. </programlisting>
  50. <para>
  51. Als een vereising klasse beschikbaar is, moet de ontwikkelaar een instantie hiervan aanleveren
  52. wanneer die een conditionele regel toekent. Een regel die is gemaakt met een vereising wordt alleen
  53. toepast als de vereising waar heeft terug gestuurd.
  54. </para>
  55. <programlisting role="php"><![CDATA[<?php
  56. require_once 'Zend/Acl.php';
  57. $acl = new Zend_Acl();
  58. $acl->allow(null, null, null, new schoonIPvereising());]]>
  59. </programlisting>
  60. <para>
  61. De bovenstaande code maakt een conditionele toestaan regel die gebruik toestaat van alle privileges
  62. op alles door iedereen, behalve als het verzoekende IP op de "zwarte lijst" staat. Als een verzoek
  63. binnenkomt van een IP dat niet beschouwd wordt als "schoon", dan wordt de toestaan regel niet toegepast.
  64. Omdat de regel geldt voor alle Rollen, alle bronnen en alle privileges, zal een "niet schoon" IP resulteren
  65. in een weigering van toegang. Dit is een speciaal geval, echter, en dit moet worden begrepen dat in alle
  66. andere gevallen ( i.e., als een specifieke Rol, Bron of privilege is gespecificeerd voor de rol ), een
  67. onwaar vereisingresultaat in de regel niet wordt toegepast en er dus andere regels gebruikt worden om
  68. te bepalen of er toegestaan of geweigerd moet worden.
  69. </para>
  70. <para>
  71. Aan de <code>assert()</code> methode van een vereisingobject wordt de ACL, Rol, Bron en privilege
  72. doorgegeven, waarop de raadpleging (i.e., <code>isAllowed()</code>) plaatsvind, dit maakt het mogelijk
  73. voor de vereisingklasse om te bepalen of zijn condities nodig zijn.
  74. </para>
  75. </sect2>
  76. </sect1>
  77. <!--
  78. vim:se ts=4 sw=4 et:
  79. -->