Bonjour,
Je suis en train de développer un petit CMS avec Zend Framework
Voici la structure de mon application:
application/
doc/
backend/
default/
controllers/
views/
frontend/
controllers/
views/
models/
controllers/
views/
config.ini
library/
public/
index.php
MyAcl.php
Auth.php
Il y a donc des controlleurs de même nom (indexController), mais dans des modules différents.
Mon probleme est le suivant : Comment définir les ACL en fonction de mes modules/controlleur/action plutot qu'avec controlleur/action ?
Par exemple : la méthode indexAction de indexController est accessible a tout utilisateur dans le module "frontend" et "default", et est seulement accessible a admin dans le module "backend".
Voici mes fichier d'ACL :
bootstrap (index.php)
MyAcl.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // Création de l'objet Acl $acl = new MyAcl($auth); // setup controller $frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setControllerDirectory('./application/controllers'); $frontController->registerPlugin(new Auth($auth, $acl)); $frontController->setControllerDirectory(array( 'default' => './application/default/controllers', 'frontend' => './application/frontend/controllers', 'backend' => './application/backend/controllers' ));
Auth.php
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 <?php class MyAcl extends Zend_Acl { public function __construct(Zend_Auth $auth) { $roleGuest = new Zend_Acl_Role('guest'); $default = new Zend_Acl_Resource('default'); $this->add($default); $this->add(new Zend_Acl_Resource('index'),$default); $frontend = new Zend_Acl_Resource('frontend'); $this->add($frontend); $this->add(new Zend_Acl_Resource('frontend/index'),$frontend); $backend = new Zend_Acl_Resource('backend'); $this->add($backend); $this->add(new Zend_Acl_Resource('backend/index'),$backend); $this->addRole(new Zend_Acl_Role('guest')); $this->addRole(new Zend_Acl_Role('author'), 'guest'); $this->addRole(new Zend_Acl_Role('admin'), 'author'); $this->addRole(new Zend_Acl_Role('root'), 'admin'); // Droits d'acces $this->allow('guest'); } } ?>
Merci d'avance pour votre aide
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
53
54
55
56
57
58
59
60
61
62
63 <?php class Auth extends Zend_Controller_Plugin_Abstract { private $_auth; private $_acl; private $_noauth = array('module' => 'default', 'controller' => 'index', 'action' => 'noauth'); private $_noacl = array('module' => 'default', 'controller' => 'index', 'action' => 'noacl'); public function __construct($auth, $acl) { $this->_auth = $auth; $this->_acl = $acl; } public function preDispatch(Zend_Controller_Request_Abstract $request) { if ($this->_auth->hasIdentity()) { $temp = $this->_auth->getIdentity()->niveau_user; $role = "guest"; if($temp == 1) $role = "guest"; if($temp == 2) $role = "author"; if($temp == 3) $role = "admin"; if($temp == 4) $role = "root"; } else { $role = 'guest'; } $controller = $request->controller; $action = $request->action; $module = $request->module; $resource = $controller; if (!$this->_acl->has($resource)) { $resource = null; } if (!$this->_acl->isAllowed($role, $resource, $action)) { if (!$this->_auth->hasIdentity()) { $module = $this->_noauth['module']; $controller = $this->_noauth['controller']; $action = $this->_noauth['action']; } else { $module = $this->_noacl['module']; $controller = $this->_noacl['controller']; $action = $this->_noacl['action']; } } $request->setModuleName($module); $request->setControllerName($controller); $request->setActionName($action); } } ?>
Partager