Bonjour à tous,
Je débute avec ZF et je rencontre pas mal de difficultés sur l'installation d'un système Auth/ACL.
J'ai suivi ce tuto, mais ce post, et celui-là m'ont fait avancer plus vite.
Mon problème
Le système ACL n'en fait qu'à sa tête ! Avec le code ci-dessous, lorsque je ne suis pas identifié (rôle "unknown"), j'ai accès à toutes les actions de tous controleurs, sans restriction.
On pourrait penser que mon ACL n'est pas "branché", mais lorsque je place un "$this->deny('unknown');", tout est bloqué comme il faut.
En résumé, soit j'ai accès à tout, soit à rien. Pas de juste milieu, ennuyeux...
Merci pour votre aide !
La Classe :
Le fameux plugin Janitrix
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 class My_Class_Acl extends Zend_Acl { public function __construct(Zend_Auth $auth) { // Définition des Controllers concernés par l'authentification. $this->add(new Zend_Acl_Resource('Auth')); $this->add(new Zend_Acl_Resource('Index')); $this->add(new Zend_Acl_Resource('Contributions')); $this->add(new Zend_Acl_Resource('Events')); $this->add(new Zend_Acl_Resource('People')); // Définition des rôles. $this->addRole(new Zend_Acl_Role('unknown')); $this->addRole(new Zend_Acl_Role('guest')); $this->addRole(new Zend_Acl_Role('member'), 'guest'); $this->addRole(new Zend_Acl_Role('admin'), 'member'); // Définition des droits. $this->allow('unknown'); $this->deny('unknown', 'Contributions'); $this->deny('unknown', 'Events'); $this->deny('unknown', 'People'); $this->allow('guest'); $this->deny('guest', 'Contributions'); $this->deny('guest', 'Events'); $this->deny('guest', 'People'); $this->allow('member'); $this->deny('member', 'Contributions'); $this->deny('member', 'Index', 'add'); $this->deny('member', 'Index', 'edit'); $this->deny('member', 'Index', 'delete'); $this->allow('admin'); } }
Puis le morceau de bootstrap :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 <?php /** * Ce fichier contient la classe Inuitech_Acl_Plugin. * * @copyright 2008 Gabriel Malkas * @license "New" BSD License */ /** * Plugin qui vérifie les droits d'accès de la session en cours * à la page demandée. * * @copyright 2008 Gabriel Malkas * @license "New" BSD License */ class My_Plugin_Acl extends Zend_Controller_Plugin_Abstract { private $_auth = null; private $_acl = null; public function __construct($auth, $acl) { $this->_auth = $auth; $this->_acl = $acl; } public function preDispatch(Zend_Controller_Request_Abstract $request) { $role = 'unknown'; if ($this->_auth->hasIdentity()) { $role = $this->_auth->getIdentity()->role; } $_SESSION['toto'] = $role; $controller = $request->controller; $action = $request->action; $module = $request->module; $resource = $this->_acl->has($controller) ? $controller : null; if (!$this->_acl->isAllowed($role, $resource, $action)) { $request->setControllerName('Error'); $request->setActionName('deny'); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // Création de l'objet Auth $auth = Zend_Auth::getInstance(); // Création de l'objet Acl $acl = new My_Class_Acl($auth); // Mise en place du controleur. $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setControllerDirectory('./application/controllers'); $frontController->registerPlugin(new My_Plugin_Acl($auth, $acl)); Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts'));
Partager