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