Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Je développe actuellement une application pour une communauté de jeux en ligne, et je rencontre des soucis sur les ACL. L'authnetification se fait via un formulaire et Zend_Auth. Çà fonctionne très bien.
Je déclare mes règles d'ACL dans le bootstrap de mon application :
Pour le moment, je m'occupe que des droits TNA sur le controller donjons.
protected function _initACL () { $acl = new Zend_Acl(); $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('user')); $acl->add(new Zend_Acl_Resource('donjons')); $acl->add(new Zend_Acl_Resource('events')); $acl->add(new Zend_Acl_Resource('items')); $acl->add(new Zend_Acl_Resource('wishes')); $acl->add(new Zend_Acl_Resource('members')); $acl->addRole(new Zend_Acl_Role('ally')); $acl->addRole(new Zend_Acl_Role('TNA')); $acl->addRole(new Zend_Acl_Role('admin')); // Contrôle d'accès pour les TNA $acl->allow('TNA', 'donjons', 'index'); $acl->deny('TNA', 'donjons', array('add', 'edit', 'delete')); // Contrôle d'accès pour les admins (Accès sans aucune restriction) $acl->allow('admin'); Zend_Registry::set('aclSite', $acl); }
Dans mon controller donjons, quand je fais un :
$auth = Zend_Auth::getinstance(); print_r($auth->getIdentity()); $acl = Zend_registry::get('aclSite'); print_r($acl->getRoles());
Les infos s'affichent très bien, mais lorsque je test l'autorisation comme ceci :
$acl->isAllowed($auth->getIdentity()->id_role, Core_Service_Common::getController(), Core_Service_Common::getAction()) ? 'autorisé' : 'refusé';
Si je me rend sur le controller donjons action index, çà me dit autorisé, et quand je vais sur controller donjons action edit, çà me dit aussi autorisé, or çà devrait dire refusé !
J'ai regardé l'API de Zend, sur des forums et tout, j'ai beau refaire comme c'est marqué sur les sites, et çà fait toujours pareil... Voyez vous où çà cloche ?
Merci d'avance.
Hors ligne
Si quelqu'un habite pas loin de Montréal, je l'autorise à venir me donner des coups de fouet !
Lors de mes controles, je faisais ceci :
$auth = Zend_Auth::getInstance()->getIdentity(); $acl = Zend_Registry::get('aclSite'); echo '<br /><br /><br />Has : '; echo ($acl->has(Core_Service_Common::getController())) ? 'resource OK' : 'resource non OK'; echo '<br />Roles : '; print_r($acl->getRoles()); echo '<br /><br />Resources : '; print_r($acl->getResources()); echo '<br /><br />Id role : ' . $acl->getRole($auth->id_role); echo '<br /><br />' . $acl->isAllowed($auth->id_role, Core_Service_Common::getController(), Core_Service_Common::getAction()) ? 'autorisé' : 'refusé';
le isAllowed mettait toujours : autorisé... Maintenant ce n'est plus le cas depuis que j'ai enlevé le '<br /><br />'...
J'ai controllé avec différentes règles ACL, et c'est ok
Hors ligne