| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <sect1 id="zend.acl.advanced">
- <title>Gevorderd gebruik</title>
- <sect2 id="zend.acl.advanced.storing">
- <title>Het opslaan van ACL data voor langere duur</title>
- <para>
- Zend_Acl is zo ontworpen dat het geen aparte achterliggende technologie zoals een database
- of een cache server voor het opslaan van ACL data nodig heeft. De complete PHP implementatie
- maakt het mogelijk om aangepaste administratie programma's te maken, gebouwd op Zend_Acl met
- relatief gemak en flexibiliteit. Veel situaties vereisen een vorm van interactief onderhoud
- van de ACL en Zend_Acl levert methodes om dit op te zetten en het raadplegen van, de
- toegangscontrole van een applicatie.
- </para>
- <para>
- Het opslaan van de ACL Data is daarom overgelaten als een taak voor de ontwikkelaar, want de
- verwachting is dat de gebruikersprocessen veel variëren voor de verschillende situaties.
- Omdat Zend_Acl te ordenen is, kan een ACL object geordend worden met de PHP functie
- <ulink url="http://php.net/serialize"><code>serialize()</code></ulink> en het resultaat kan worden
- opgeslagen waar de ontwikkelaar dat wenst, zoals een bestand, database of een caching mechanisme.
- </para>
- </sect2>
- <sect2 id="zend.acl.advanced.assertions">
- <title>Schrijven van conditionele ACL regels met een vereising</title>
- <para>
- Soms is een regel voor het toestaan of weigeren van een Rol om een Bron te gebruiken niet absoluut, maar
- hangt dit af van een aantal criteria. Als voorbeeld, stel dat iets moet worden toegestaan, maar
- alleen tussen 8:00 en 17:00. Een ander voorbeeld is het weigeren van toegang omdat het verzoek komt van
- een IP adres die gemarkeerd is als een bron van misbruik. Zend_Acl heeft een ingebouwde ondersteuning om
- regels, gebaseerd op wat voor condities de ontwikkelaar nodig heeft, te implementeren.
- </para>
- <para>
- Zend_Acl levert ondersteuning voor conditionele regels met <code>Zend_Acl_Assert_Interface</code>.
- Om de regel vereising interface te gebruiken, schrijft de ontwikkelaar een class die de
- <code>assert()</code> methode van de interface implementeerd.
- </para>
- <programlisting role="php"><![CDATA[<?php
- require_once 'Zend/Acl/Assert/Interface.php';
- class schoonIPvereising implements Zend_Acl_Assert_Interface
- {
- public function assert(Zend_Acl $acl, Zend_Acl_Role_Interface $role = null,
- Zend_Acl_Resource_Interface $resource = null, $privilege = null)
- {
- return $this->_isEenSchoonIP($_SERVER['REMOTE_ADDR']);
- }
- protected function _isEenSchoonIP($ip)
- {
- // ...
- }
- }]]>
- </programlisting>
- <para>
- Als een vereising klasse beschikbaar is, moet de ontwikkelaar een instantie hiervan aanleveren
- wanneer die een conditionele regel toekent. Een regel die is gemaakt met een vereising wordt alleen
- toepast als de vereising waar heeft terug gestuurd.
- </para>
- <programlisting role="php"><![CDATA[<?php
- require_once 'Zend/Acl.php';
- $acl = new Zend_Acl();
- $acl->allow(null, null, null, new schoonIPvereising());]]>
- </programlisting>
- <para>
- De bovenstaande code maakt een conditionele toestaan regel die gebruik toestaat van alle privileges
- op alles door iedereen, behalve als het verzoekende IP op de "zwarte lijst" staat. Als een verzoek
- binnenkomt van een IP dat niet beschouwd wordt als "schoon", dan wordt de toestaan regel niet toegepast.
- Omdat de regel geldt voor alle Rollen, alle bronnen en alle privileges, zal een "niet schoon" IP resulteren
- in een weigering van toegang. Dit is een speciaal geval, echter, en dit moet worden begrepen dat in alle
- andere gevallen ( i.e., als een specifieke Rol, Bron of privilege is gespecificeerd voor de rol ), een
- onwaar vereisingresultaat in de regel niet wordt toegepast en er dus andere regels gebruikt worden om
- te bepalen of er toegestaan of geweigerd moet worden.
- </para>
- <para>
- Aan de <code>assert()</code> methode van een vereisingobject wordt de ACL, Rol, Bron en privilege
- doorgegeven, waarop de raadpleging (i.e., <code>isAllowed()</code>) plaatsvind, dit maakt het mogelijk
- voor de vereisingklasse om te bepalen of zijn condities nodig zijn.
- </para>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|