Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous
Je suis face à un comportement des acl et je sais pas si elles réagissent convenablement ou bien si c'est une erreur de ma part. J'explique:
J'ai défini un role 'guest' par exemple et une resource 'index', jusque la c'est classique.
J'ai ensuite défini les acl comme ceci:
cas 1: $acl->allow('guest', 'index');
$acl->allow('guest', 'index', 'voir');
cas 2: $acl->allow('guest', 'index');
$acl->allow('guest', 'index', 'voir');
$acl->deny('guest', 'index', 'mod');
Quand j'interroge mon acl sur la ressource 'index' (isAllowed('guest', 'index')) dans le cas 1 j'ai true et dans le cas 2 j'ai false. Est ce normal? est ce que dès que j'ai un privillège sous une ressource à deny, la resource "globale" est mise à false?
Vincent
Hors ligne
Il n'y a personne qui peut me confirmer le comportement de mes acl?
Vincent
Hors ligne
Je ne suis pas allé voir précisément, mais ça me paraît logique comme comportement que la resource globale soit interdite si tu interdis un élément à l'intérieur de celle ci.
Après en termes de priorité, ce sont les derniers droits enregistrés qui sont prioritaires.
A+, Philippe
Hors ligne
Oui c'est vrai que dans un sens c'est logique mais ca me pose problème car du coup quand j'utilise mes acl dans zend_navigation, il ne me montre pas le lien qui est autorisé :s
Merci
Vincent
Hors ligne
J'imagine que "index" c'est un contrôleur. Tu n'as pas une action qui correspond ?
un truc du genre :
$acl->allow('guest', 'index','index');
Ca règlerait ton problème.
A+, Philippe
Hors ligne
Salut Philippe,
Oui "index" est bien un controlleur et j'ai des actions qui en découle mais si tu veux dans mon menu géré par zend_navigation, à l'affichage j'ai un truc du genre:
index
|- Voir
|- Modifier
J'avais pensé que si j'ai un deny au niveau du controlleur, il ne me montre pas les actions qui en découle (je n'aurai jamais un deny au niveau d'un controlleur et un allow sur une action du meme controlleur) mais que par contre il m'aurait quand meme bien montré la branche autorisée (dans le cas ou j'autorisais et le controleur et l'action) et ici c'est pas le cas
C'est vrai que si j'arrive pas, je ne mettrai pas mes acl au niveau du controlleur mais bien sur tous mes controlleurs + actions. Mais c'est domage de pas pouvoir utiliser la puissance des parents - enfants mis à disposition par zf.
Merci pour ton aide
A+ Vincent
Hors ligne
Dans ta navigation, index pointe vers une action (pas juste un contrôleur). Je ne connais pas Zend_Navigation, mais tu ne peux pas lui dire que le parent "index" pointe vers telle action spécifiquement ?
index
|- Voir
|- Modifier
A+, Philippe
Hors ligne
Salut,
J'utilise Zend_Navigation et Zend_Acl comme toi et je n'ai pas ce genre de problème.
Voilà en simplifié comment je fais (tout est totalement fictif hein) :
Un morceau de ma classe Acl :
$this->add(new Zend_Acl_Resource('front')); $this->add(new Zend_Acl_Resource('front_index')); $this->add(new Zend_Acl_Resource('front_activity')); $this->add(new Zend_Acl_Resource('front_wallet')); $this->addRole(new Zend_Acl_Role('peon'), $this->getDefaultRole()) ->addRole(new Zend_Acl_Role('manager'), 'peon') ->addRole(new Zend_Acl_Role('admin')); $this->deny(); $this->allow('peon', 'front_index'); $this->allow('peon', 'front_activity', array('index', 'export')); $this->allow('peon', 'front_wallet', array('index', 'export')); $this->allow('manager', 'front_activity'); $this->allow('manager', 'front_wallet'); $this->allow('admin');
La config de Zend_Navigation (MVC) :
<front id="front" label="" title="" action="index" controller="index" resource="front_index"> <pages> <!-- Dashboard --> <dashboard id="dashboard" label="Tableau de bord" title="" class="menu-a-dashboard" action="index" controller="index" resource="front_index" /> <!-- Activity --> <activity id="activity" label="Activité" title="" class="menu-a-activity" action="index" controller="activity"> <pages> <group id="activity_group" label="Groupement" title="" action="index" controller="activity" resource="front_activity" privilege="index" /> <export id="activity_export" label="Exportations" title="" action="export" controller="activity" resource="front_activity" privilege="export" /> <privacy id="activity_privacy" label="Données confidentielles" title="" action="privacy" controller="activity" resource="front_activity" privilege="privacy" /> </pages> </activity> <!-- Wallet --> <wallet id="wallet" label="Portefeuille" title="" class="menu-a-wallet" action="index" controller="wallet"> <pages> <group id="wallet_group" label="Groupement" title="" action="index" controller="wallet" resource="front_wallet" privilege="index" /> <export id="wallet_export" label="Exportations" title="" action="export" controller="wallet" resource="front_wallet" privilege="export" /> <privacy id="wallet_privacy" label="Données confidentielles" title="" action="privacy" controller="wallet" resource="front_wallet" privilege="privacy" /> </pages> </wallet> </pages> </front> <admin> <!-- .... --> </admin>
Dans la méthode init() de mon helper d'action Acl :
$this->_actionController->view->navigation()->setAcl($this->_acl)->setRole($this->_getActualRole());
Et avec tout ça ça fonctionne à merveille
A+ benjamin.
Hors ligne
@Philippe si le controlleur index pointe vers l'action index et je pense que tu as raison moi je ne défini aucune acl pour "index - index", mon action index as les droits du controlleur index. Je pense que la solution c'est de créer une acl "index - index" spécifique
@Delprog, oui je fais quasiment la meme chose que toi sauf que je mettais des acl sur le menu parent et du coup il ne m'affiche rien de la branche du menu dès que j'ai une acl de la branche à deny (acl qui ne contient pas controlleur + action mais juste controlleur).
Je vais essayer de faire des acl controlleur + action et ca devrait fonctionner.
En tout cas merci à vous 2 pour votre aide. Je vous tiendrai au courrant dès que j'aurai testé (peut etre pas tout de suite car je fais ca en dehors de mes heures de boulot qui sont déjà nombreuses ces temps ci )
A+ Vincent
Hors ligne