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.

Reply via email to