thanks darby. i have temporarily solved it by putting the ACL Object inside the Zend_Auth object - during authentication. i serialized $acl and then unserialized when i need to do an isAllow()... im not sure if this is the best approach but it works for me as of the moment.... thanks for pointing out the plugins. i have so much to learn from ZF... i will be experimenting with the Plugins first thing tomorrow... :)
Darby Felton wrote: > > Hello, > > In AuthController.php you setup an ACL object, which goes out of scope > at the end of the script and is destroyed at that time. > > In FooController.php you are creating a new and separate ACL object. Of > course it does not have the information that the ACL object created in > AuthController.php had - it's a different object! :) > > If you need the ACL object (or any other data stored in a user variable, > for that matter) available across all your controllers, you must persist > the data somewhere (e.g., the PHP session, a database). But this is > probably not the best approach. I understand that people have had a lot > of success with implementing a front controller plugin that implements > authorization with preDispatch(). > > For more information about creating a front controller plugin, please see: > > http://framework.zend.com/manual/en/zend.controller.plugins.html > > Hope this helps! > > Best regards, > Darby > > wenbert wrote: >> i have this in one of the controllers in my AuthController.php >> >> // set access controlls >> // ------------------------------------- >> $acl = new Zend_Acl(); >> >> //define resources >> $acl->add(new Zend_Acl_Resource('admin_pages')); >> $acl->add(new Zend_Acl_Resource('claim')); >> $acl->add(new Zend_Acl_Resource('views')); >> $acl->add(new Zend_Acl_Resource('reports')); >> $acl->add(new Zend_Acl_Resource('research')); >> >> $roles = explode(' ',$data['group_names']); >> foreach ($roles as $role) { >> $myrole = new Zend_Acl_Role($role); >> $acl->addRole($myrole); >> >> if ($role == 'admin') { >> $acl->allow($myrole, 'admin_pages', array('admin_access')); >> } elseif ($role == 'xxx') { >> $acl->allow($myrole, array('claim', 'views', 'reports'), >> array('create_claim', 'save_claim', 'close_claim', 'view')); >> } elseif ($role == 'yyy') { >> $acl->allow($myrole, array('research', 'views', 'reports'), >> array('research_open', 'view')); >> } >> //echo $acl->isAllowed($role, null, 'research_open') ? "$role: >> allowed<br />" : "$role: denied<br />"; >> } >> // ------------------------------------- >> >> BUT, i can't access the ACL in another FooController.php >> Zend_Loader::loadClass('Zend_Acl'); >> Zend_Loader::loadClass('Zend_Acl_Role'); >> Zend_Loader::loadClass('Zend_Acl_Resource'); >> $acl = new Zend_Acl; >> $acl->isAllowed('xxx', 'claim', 'create_claim') ? "myrole: allowed<br />" >> : >> "myrole: denied<br />"; >> >> i get an error that says: >> Fatal error: Uncaught exception 'Zend_Acl_Role_Registry_Exception' with >> message 'Role 'xxx' not found' >> >> how would i access the stuff i created in my AuthController.php from in >> other controllers/actions? >> so that I can do this: >> $acl->isAllowed('xxx', 'claim', 'create_claim') ? "myrole: allowed<br />" >> : >> "myrole: denied<br />"; >> in any part of my application? >> >> any reply will be appreciated :) >> thanks > > -- View this message in context: http://www.nabble.com/Zend_Acl%3A-Role-not-found-in-other-controllers-tf3905692s16154.html#a11078854 Sent from the Zend Framework mailing list archive at Nabble.com.
