Coding Samples, Tutorials, Code Snippets, Articles, How-To`s - From Beginners to Expert. Stay tuned.
Share your knowledge. Regardless what experience you have made with the Zend Framework - Let all benefit.

Search Manual:

Please Sign in or Register

Available Languages

 


Manual for Zend Framework 1.0.3

2.2. Affiner les Contrôles d'Accès

2.2.1. Mieux définir les Contrôles d'Accès

La liste basique définie dans le chapitre précédent montre comment plusieurs privilèges peuvent être alloués pour l'ensemble de la liste (toutes les ressources). En pratique, toutefois, les contrôles d'accès ont souvent des exceptions et des degrés de complexité variables. Zend_Acl permet d'atteindre ce degré de finesse d'une manière directe et flexible.

Pour l'exemple du CMS, 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 CMS. Le groupe va recevoir la possibilité de publier et d'archiver à la fois des newsletters et des news.

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.

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'.

<?php
// Le nouveau groupe Marketing hérite des permissions de Staff
$acl->addRole(new Zend_Acl_Role('marketing'), 'staff');
    	

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 :

<?php
// Créer les Ressources pour les règles
require_once 'Zend/Acl/Resource.php';
$acl->add(new Zend_Acl_Resource('newsletter'));           // newsletter
$acl->add(new Zend_Acl_Resource('news'));                 // news
$acl->add(new Zend_Acl_Resource('latest'), 'news');       // dernières news
$acl->add(new Zend_Acl_Resource('announcement'), 'news'); // annonces
   		

Ensuite c'est simplement une manière de définir ces règles spécifiques sur les parties cibles de l'ACL :

<?php
// 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');
    	

On peut maintenant interroger les ACL sur base des dernières modifications :

<?php
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é
    	

2.2.2. Retirer les Contrôles d'Accès

Pour retirer une ou plusieurs règles des ACL, utilisez simplement la méthode removeAllow() ou removeDeny(). Comme pour allow() et deny(), vous pouvez utiliser une valeur null pour indiquer que la méthode s'applique à tous les Roles, Ressources et/ou Privilèges.

<?php
// 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é
    	

Les privilèges peuvent être modifiés de manière incrémentielle comme indiqué au dessus, mais une valeur null pour les privilèges écrase ces modifications incrémentielles.

<?php
// 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é
    	

Welcome!

Welcome to ZFResource - The Resource for the Zend Framework.
As you see, the website is in still in progress. Many features ( like Code Directory, Code Samples, User written Tutorials, Examples and News,...) will be online in near future.
At the moment, you can search and browse the manual in your language of choice. Don't forget to come back later to benefit from the new features.


Help Wanted:

We are still searching for people want to help building this site. If you want to see this website in your language or you have any suggestions for this site please send us an email