Details
Description
Zend_Acl manual states that:
The assert() method of an assertion object is passed the ACL, role, resource, and privilege to which the authorization query (i.e., isAllowed()) applies, in order to provide a context for the assertion class to determine its conditions where needed.
That is not true! When assertion is attached to global "all-roles" pseudo-parent in on ACL tree with:
$acl::allow(null,null,null,new MyAssertion());
... with the assertion built like:
class MyAssertion implements Zend_Acl_Assert_Interface { public function assert(Zend_Acl $acl, Zend_Acl_Role_Interface $role = null, Zend_Acl_Resource_Interface $resource = null, $privilege = null) { if($role == 'someRole') return true; elseif($resource == 'someBannedResource') return false; else return true; } }
... Then after a query:
$acl->isAllowed('someRole','someResource','somePermission');
... the assertion should be called with
assert(Zend_Acl object, 'somerole', 'someResource', 'somePermission').
Instead it is called with
assert(Zend_Acl object, null, null, null)
Issue Links
| This issue duplicates: | ||||
| ZF-1722 | Zend_Acl assertions broken when inheritance is required (ie DepthFirstSearch) |
|
|
|
Assigning to Ralph to get closure on this issues.