Witam,
mam problem w uruchomieniu ACL

mam pliki
index.php
  1. <?php
  2. ....
  3. include "Zend/Loader.php";
  4. Zend_Loader::loadClass('Zend_Controller_Front');
  5. Zend_Loader::loadClass('Zend_Config_Ini');
  6. Zend_Loader::loadClass('Zend_Registry');
  7. Zend_Loader::loadClass('Zend_Db');
  8. Zend_Loader::loadClass('Zend_Db_Table');
  9. Zend_Loader::loadClass('Zend_Db_Select');
  10. Zend_Loader::loadClass('Zend_Db_Table_Abstract');
  11. Zend_Loader::loadClass('Zend_Auth');
  12. Zend_Loader::loadClass('Zend_Acl');
  13. Zend_Loader::loadClass('MyACL');
  14.  
  15. // load configuration
  16. $config = new Zend_Config_Ini('./application/config.ini','general');
  17. Zend_Registry::set('config', $config);
  18.  
  19. // setup database
  20. $db = Zend_Db::factory( $config->db->adapter,
  21. $config->db->config->toArray() );
  22. Zend_Db_Table::setDefaultAdapter($db);
  23. Zend_Registry::set('db', $db);
  24. $db->query('SET NAMES latin2');
  25. $db->query('SET CHARACTER SET latin2');
  26.  
  27. //setup ACL
  28. $acl = new MyACL( $db );
  29. Zend_Registry::set('acl', $acl);
  30.  
  31. ...
  32. ?>


MyACL.php
  1. <?php
  2. require_once 'Zend/Db.php';
  3.  
  4. require_once 'Zend/Acl.php';
  5. require_once 'Zend/Acl/Role.php';
  6. require_once 'Zend/Acl/Resource.php';
  7. require_once 'Zend/Acl/Exception.php';
  8.  
  9. class MyACL extends Zend_ACL {
  10.  
  11. public function __construct( Zend_Db_Adapter_Abstract &$db ){
  12. $auth = Zend_Auth::getInstance();
  13. $select = $db->select()->from(array('r' => 'acl_roles'),array('r.resource','r.privileges', 'u.username', 'u.id'))
  14. ->join(array('u' => 'users'),'r.id_user_fk = u.id')
  15. ->where('u.username = ?',$auth->getIdentity()->username);
  16. $result = $select->query()->fetchAll();
  17.  
  18. echo"<PRE>";print_r($result);echo "</PRE>";
  19.  
  20. $acl = new Zend_Acl();
  21. $acl->addRole(new Zend_Acl_Role($auth->getIdentity()->username));
  22. foreach($result as $acl_role){
  23. $acl->add(new Zend_Acl_Resource($acl_role['resource']));
  24. }
  25. foreach($result as $acl_role){
  26. $acl->allow($auth->getIdentity()->username,$acl_role['resource'],unserialize($acl_role['privileges']));
  27. }
  28. var_dump( $acl->isAllowed( $auth->getIdentity()->username,'index','read' ) );
  29. }
  30. }
  31. ?>


i w IndexController.php mam funkcje
  1. <?php
  2. function preDispatch() {
  3. $auth = Zend_Auth::getInstance();
  4. if (!$auth->hasIdentity()) {
  5. $this->_redirect('auth/login');
  6. }
  7. $acl= Zend_Registry::get('acl');
  8. var_dump( $acl->isAllowed( $auth->getIdentity()->username,'index','read' ) );
  9. }
  10. ?>


I występuje błąd po autoryzacji jak wchodzę na index:

Fatal error: Uncaught exception 'Zend_Acl_Role_Registry_Exception' with message 'Role 'test' not found' in /var/www/htdocs/projekt4/library/Zend/Acl/Role/Registry.php:123 Stack trace: #0 /var/www/htdocs/projekt4/library/Zend/Acl.php(688): Zend_Acl_Role_Registry->get('test') #1 /var/www/htdocs/projekt4/application/controllers/IndexController.php(29): Zend_Acl->isAllowed('test', 'index', 'read') #2 /var/www/htdocs/projekt4/library/Zend/Controller/Action.php(496): IndexController->preDispatch() #3 /var/www/htdocs/projekt4/library/Zend/Controller/Dispatcher/Standard.php(242): Zend_Controller_Action->dispatch('indexAction') #4 /var/www/htdocs/projekt4/library/Zend/Controller/Front.php(929): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #5 /var/www/htdocs/projekt4/index.php(47): Zend_Controller_Front->dispatch() #6 {main} thrown in /var/www/htdocs/projekt4/library/Zend/Acl/Role/Registry.php on line 123

męczę sie z tym już kilka dni (pewnie dlatego iż jestem początkującym w Zendzie)
Bardzo proszę o pomoc

już rozwiązałem problem. polegał on na tym że chciałem przekazywać przez registry ale używałem _redirect teraz używam sesji i jest ok