Pour chaque application web ou CMS que j'ai développé, j'ai souvent eu de la difficulté à figurer de quelle façon j'allais implémenter la gestion des droits d'accès (par utilisateur, par niveau, par module et même par fonctionnalité). Malgré mes tentatives, je n'étais jamais tout à fait satisfait de l'élégance et de la lisibilité du code produit. Jusqu'à ce que je découvre Zend_Acl (Access Control List), un composant faisant parti de la librairie Zend Framework pour PHP.
Ce qui est bien avec le Zend Framework, c'est qu'il ressemble davantage à une librairie de code et de compostants plutôt qu'un framework imposant un cadre de travail prédéfini à respecter. Ça nous laisse donc la possibilité d'utiliser seulement les objets que nous avons besoins, tout en conservant nos bonnes (et parfois mauvaises!) habitudes de travail.
Pour pouvoir utiliser le composant, il faut d'abord télécharger Zend Framework (actuellement la version 1.7) et inclure les fichiers sources à son projet.
Dans un fichier php global au projet, on ajoutera les références aux objets nécessaires :
require_once('Zend/Acl.php');
require_once('Zend/Acl/Role.php');
require_once('Zend/Acl/Resource.php');
Instancier un objet ACL :
$oAcl = new Zend_Acl();
Définir les rôles :
$oAcl->addRole( new Zend_Acl_Role('programmers') );
$oAcl->addRole( new Zend_Acl_Role('designers') );
$oAcl->addRole( new Zend_Acl_Role('sysadmin') );
On spécifiera ensuite les ressources du site ou de l'application (par exemple un module ou une section) :
$oAcl->add( new Zend_Acl_Resource('internet') );
$oAcl->add( new Zend_Acl_Resource('databases') );
$oAcl->add( new Zend_Acl_Resource('zend_studio') );
$oAcl->add( new Zend_Acl_Resource('coffee') );
$oAcl->add( new Zend_Acl_Resource('photoshop') );
$oAcl->add( new Zend_Acl_Resource('servers') );
$oAcl->add( new Zend_Acl_Resource('porn') );
Pour terminer, on indiquera pour chaque module quels sont les privilèges qu'un niveau d'utilisateur a droit :
// Tous les niveaux
$oAcl->allow(null, 'internet', 'view');
$oAcl->allow(null, 'coffee', 'drink');
$oAcl->allow(null, 'porn', 'view');
$oAcl->allow('programmers', array('databases', 'zend_studio'), 'use' );
$oAcl->allow('designers', 'photoshop', 'use');
$oAcl->allow('sysadmin', 'servers', 'update');
$oAcl->deny( array('programmers', 'designers'), 'porn');
Je crois que vous avez compris, nul besoin de m'acharner puisque le code parle de lui-même. On pourra ensuite vérifier les droits aux endroits nécessaires et agir en conséquence (afficher une section, refuser l'accès, etc.) :
if ( !$oAcl->isAllowed($userLevel, 'coffee', 'drink') ) {
...
}
Avec Zend_Acl, il devient facile de faire la gestion des ressources, des rôles et des privilèges. En plus d'être facile à lire, le code se maintient très facilement. On peut ajouter de nouveaux rôles et de nouvelles ressources en un rien de temps. Exactement le genre de composant que j'aime pour être efficace dans mon travail.
mardi 25 novembre 2008
2 réponses à "Gestion des droits avec Zend_Acl"
S'abonner à :
Publier des commentaires (Atom)
Mais par la suite, comment les stocker (include d'un fichier ?) , les utiliser ? Les utilisateurs nommés sont-ils des roles ?
Merci
Juste à les mettre dans un fichier global comme un bootstrap. Oui, ça fonctionne sous le principe de rôles.