| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.acl.refining">
- <title>Affiner les Contrôles d'Accès</title>
- <sect2 id="zend.acl.refining.precise">
- <title>Mieux définir les Contrôles d'Accès</title>
- <para>
- L'<acronym>ACL</acronym> basique définie dans le
- <link linkend="zend.acl.introduction">chapitre précédent</link>montre comment plusieurs
- privilèges peuvent être alloués pour l'ensemble de l'<acronym>ACL</acronym> (toutes les
- ressources). En pratique, toutefois, les contrôles d'accès ont souvent des exceptions et
- des degrés de complexité variables. <classname>Zend_Acl</classname> permet d'atteindre
- ce degré de finesse d'une manière directe et flexible.
- </para>
- <para>
- Pour l'exemple du <acronym>CMS</acronym>, nous avons déterminé que bien que le groupe
- "Staff" couvre les besoins de la plupart des utilisateurs, un groupe "Marketing" est
- nécessaire. Ce groupe doit avoir accès à la newsletter et aux dernières news dans le
- <acronym>CMS</acronym>. Le groupe va recevoir la possibilité de publier et d'archiver à
- la fois des newsletters et des news.
- </para>
- <para>
- De plus, il a été demandé que le groupe "Staff" puisse voir les nouveaux textes,
- mais pas les nouvelles news. Enfin, il devrait être impossible pour tout le monde (y
- compris les administrateurs) d'archiver un contenu qui n'aurait une durée de vie que de
- 1 ou 2 jours.
- </para>
- <para>
- En premier lieu, nous modifions le registre des rôles pour refléter ces
- changements. Nous avons dit que le groupe "Marketing" a les même permissions de base
- que "Staff". Donc nous créons "marketing" pour qu'il hérite des permissions de
- "staff".
- </para>
- <programlisting language="php"><![CDATA[
- // Le nouveau groupe Marketing hérite des permissions de Staff
- $acl->addRole(new Zend_Acl_Role('marketing'), 'staff');
- ]]></programlisting>
- <para>
- Ensuite, notez que les contrôles d'accès plus haut font référence à des
- ressources (ex. "newsletters", "dernières news", "annonces"). Maintenant, nous ajoutons
- ces Ressources :
- </para>
- <programlisting language="php"><![CDATA[
- // Créer les Ressources pour les règles
- // newsletter
- $acl->addResource(new Zend_Acl_Resource('newsletter'));
- // news
- $acl->addResource(new Zend_Acl_Resource('news'));
- // dernières news
- $acl->addResource(new Zend_Acl_Resource('latest'), 'news');
- // annonces
- $acl->addResource(new Zend_Acl_Resource('announcement'), 'news');
- ]]></programlisting>
- <para>
- Ensuite c'est simplement une manière de définir ces règles spécifiques sur les
- parties cibles de l'<acronym>ACL</acronym> :
- </para>
- <programlisting language="php"><![CDATA[
- // Le Marketing doit être capable de publier
- // et d'archiver les newsletters et les dernières news
- $acl->allow('marketing',
- array('newsletter', 'latest'),
- array('publish', 'archive'));
- // Staff (et marketing, par héritage),
- // n'ont pas la permission de relire les dernières news
- $acl->deny('staff', 'latest', 'relire');
- // Personne (y compris les administrateurs)
- // n'a la permission d'archiver des annonces
- $acl->deny(null, 'annonce', 'archive');
- ]]></programlisting>
- <para>
- On peut maintenant interroger les <acronym>ACL</acronym> sur base des dernières
- modifications :
- </para>
- <programlisting language="php"><![CDATA[
- echo $acl->isAllowed('staff', 'newsletter', 'publish') ?
- "autorisé" : "refusé"; // refusé
- echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
- "autorisé" : "refusé"; // autorisé
- echo $acl->isAllowed('staff', 'latest', 'publish') ?
- "autorisé" : "refusé"; // refusé
- echo $acl->isAllowed('marketing', 'latest', 'publish') ?
- "autorisé" : "refusé"; // autorisé
- echo $acl->isAllowed('marketing', 'latest', 'archive') ?
- "autorisé" : "refusé"; // autorisé
- echo $acl->isAllowed('marketing', 'latest', 'revise') ?
- "autorisé" : "refusé"; // refusé
- echo $acl->isAllowed('editor', 'announcement', 'archive') ?
- "autorisé" : "refusé"; // refusé
- echo $acl->isAllowed('administrator', 'announcement', 'archive') ?
- "autorisé" : "refusé"; // refusé
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.acl.refining.removing">
- <title>Retirer les Contrôles d'Accès</title>
- <para>
- Pour retirer une ou plusieurs règles des <acronym>ACL</acronym>, utilisez simplement la
- méthode <methodname>removeAllow()</methodname> ou <methodname>removeDeny()</methodname>.
- Comme pour <methodname>allow()</methodname> et <methodname>deny()</methodname>, vous
- pouvez utiliser une valeur <constant>NULL</constant> pour indiquer que la méthode
- s'applique à tous les rôles, ressources et / ou privilèges.
- </para>
- <programlisting language="php"><![CDATA[
- // Retire l'interdiction de relire les dernières news au Staff
- // (et au marketing, par héritage)
- $acl->removeDeny('staff', 'latest', 'relire');
- echo $acl->isAllowed('marketing', 'latest', 'relire') ?
- "autorisé" : "refusé"; // autorisé
- // Retire l'autorisation de publier
- // et archiver les newsletters au Marketing
- $acl->removeAllow('marketing',
- 'newsletter',
- array('publish', 'archive'));
- echo $acl->isAllowed('marketing', 'newsletter', 'publish') ?
- "autorisé" : "refusé"; // refusé
- echo $acl->isAllowed('marketing', 'newsletter', 'archive') ?
- "autorisé" : "refusé"; // refusé
- ]]></programlisting>
- <para>
- Les privilèges peuvent être modifiés de manière incrémentielle comme indiqué au
- dessus, mais une valeur <constant>NULL</constant> pour les privilèges écrase ces
- modifications incrémentielles.
- </para>
- <programlisting language="php"><![CDATA[
- // donne au groupe Marketing toutes les permissions
- // sur les dernières nouvelles
- $acl->allow('marketing', 'latest');
- echo $acl->isAllowed('marketing', 'latest', 'publish') ?
- "autorisé" : "refusé"; // autorisé
- echo $acl->isAllowed('marketing', 'latest', 'archive') ?
- "autorisé" : "refusé"; // autorisé
- echo $acl->isAllowed('marketing', 'latest', 'anything') ?
- "autorisé" : "refusé"; // autorisé
- ]]></programlisting>
- </sect2>
- </sect1>
|