Mam 2 moduły: default i admin.
I teraz mam swój ACL, w którym chciałbym zablokować "guestowi" wszystkie zasoby modułu "admin" poza kontrollerem auth
<?php class My_Plugin_Acl extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { $acl = new Zend_Acl; // dodajemy role $acl->addRole(new Zend_Acl_Role('guest')); $acl->addRole(new Zend_Acl_Role('admin')); // dodajemy zasoby $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('post')); $acl->add(new Zend_Acl_Resource('error')); $acl->add(new Zend_Acl_Resource('admin')); $acl->add(new Zend_Acl_Resource('admin:index')); $acl->add(new Zend_Acl_Resource('admin:post')); $acl->add(new Zend_Acl_Resource('admin:user')); $acl->add(new Zend_Acl_Resource('admin:error')); $acl->add(new Zend_Acl_Resource('admin:auth')); // przydzielamy prawa $acl->allow('guest', 'index'); $acl->allow('guest', 'post'); $acl->allow('guest', 'error'); $acl->allow('guest', 'admin'); $acl->deny('guest', 'admin:index'); $acl->allow('guest', 'admin:auth'); $acl->allow('admin', null); // admin ma nieograniczone uprawnienia // rozpoczynamy sprawdzanie uprawnień $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $identity = $auth->getIdentity()->role; $role = $identity; } else { $role = 'guest'; } $controller = $request->controller; $action = $request->action; if (!$acl->isAllowed($role, $controller, $action)) { if ($role == 'guest') { $request->setModuleName('admin'); $request->setControllerName('auth'); $request->setActionName('login'); } else { $request->setControllerName('error'); $request->setActionName('error'); } } } }
To jest moja klasa, wszystko spięte i działa, poza tym że nie mogę zmusić do zablokowania zasobów modułu admin.
Ktoś ma jakiś pomysł?