Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Hello,
Pour avoir une gestion des règles souple, je souhaite stocker mes autorisations dans un fichier XML.
LE but étant de charger le Zend_Acl à partir de ce fichier xml.
Est-ce que quelqu'un d'entre vous aurait déjà coder un truc de ce genre ?
Merci d'avance.
Dernière modification par kaboume (23-03-2009 14:33:51)
Hors ligne
À mon avis, cela doit se faire très simplement en cherchant dans la documentation. Avec par exemple un petit Zend_Config où tu précises l'adaptateur XML. Beaucoup de composants acceptent un objet Zend_Config en constructeur. En regardant rapidement, ce n'est pas le cas de Zend_Acl. Néanmoins, il suffit de dériver Zend_Acl pour définir un constructeur ou une méthode qui accepte un Zend_Config_Xml ou pas en paramètre. Après c'est un objet que tu moulines sur les méthode add() et allow(), etc.
Hors ligne
Je propose sur mon blog une solution qui utilise des configurations via fichier INI, via Zend_Config_Ini. Il est très facile d'imaginer l'adaptation de ces classes avec comme source du XML.
Je te propose le lien sans prétention : Gestion des accès avec Zend Auth et Zend Acl
Hors ligne
Bonjour,
Je cherchais la solution, et finalement je l'ai trouvée.
Alors je la poste pour en faire profiter ceux qui chercheraient (comme moi) encore en 2012 et qui tomberaient sur cette page.
Deux fichiers: class My_Acl dans ../library/my/acl.php et acl.xml dans ../configs/acl.xml.
[lang=php]<?php class My_Acl extends Zend_Acl { var $_config; public function __construct(Zend_Config $config) { $this->_config = $config; $this->loadRole(); $this->loadRessources(); $this->loadPrivileges(); } private function loadRole(){ $roles = $this->_config->roles; foreach($roles as $role) { if ($role->parent == null) { $this->addRole(new Zend_Acl_Role($role->name)); } else { $this->addRole(new Zend_Acl_Role($role->name, $role->parent)); } } } private function loadRessources() { $ressources = $this->_config->ressources; foreach($ressources->modules as $module) { $this->add(new Zend_Acl_Resource($module->modulename)); if ($module->modulename == 'default') { foreach ($module->controllers as $controller) { $this->add(new Zend_Acl_Resource($controller->controllername, $module->modulename)); } } else { foreach ($module->controllers as $controller) { $this->add(new Zend_Acl_Resource($module->modulename.':'.$controller->controllername, $module->modulename)); } } } } private function loadPrivileges() { $privileges = $this->_config->privileges; $rules = $privileges->rules->toArray(); foreach ($rules['rule'] as $rule) { if ($rule['access'] == 'allow') { $this->allow($rule['role'], $rule['ressource'], $rule['privilege']!='null'?explode(',', $rule['privilege']):NULL); } else { $this->deny($rule['role'], $rule['ressource'], $rule['privilege']!='null'?explode(',', $rule['privilege']):NULL); } } } }
[lang=xml]<?xml version="1.0" encoding="utf-8"?> <config> <acl> <ressources> <modules> <default> <modulename>default</modulename> <controllers> <error> <controllername>error</controllername> </error> <index> <controllername>index</controllername> </index> </controllers> </default> <auth> <modulename>auth</modulename> <controllers> <index> <controllername>index</controllername> </index> </controllers> </auth> </modules> </ressources> <roles> <guest> <name>guest</name> <parent>null</parent> </guest> <user> <name>utilisateur</name> <parent>guest</parent> </user> <chauffeur> <name>chauffeur</name> <parent>guest</parent> </chauffeur> <admin> <name>administrateur</name> <parent>guest</parent> </admin> </roles> <privileges> <rules> <rule role="guest" access="allow" ressource="error" privilege="null" /> <rule role="guest" access="allow" ressource="index" privilege="null" /> <rule role="guest" access="allow" ressource="auth:index" privilege="index,login,forgotpasswword" /> <rule role="utilisateur" access="deny" ressource="auth:index" privilege="login" /> <rule role="utilisateur" access="allow" ressource="auth:index" privilege="logout" /> <rule role="utilisateur" access="allow" ressource="default" privilege="null" /> </rules> </privileges> </acl> </config>
et dans le Bootstrap:
][lang=php]$acl = new My_Acl(new Zend_Config_Xml(APPLICATION_PATH . '\configs\acl.xml', 'acl'));
N'hésitez pas à apporter vos suggestions, j'espère que celà servira à certains.
JB
Dernière modification par ptitjib (01-05-2012 02:15:47)
Hors ligne
Pages: 1