Bläddra i källkod

Made sure privilege parameter of assertion is passed on to assertion. #ZF-7973

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18561 44c647ce-9c0f-0410-b52a-842ac1e357ba
freak 16 år sedan
förälder
incheckning
08cd4dfe57
3 ändrade filer med 42 tillägg och 2 borttagningar
  1. 10 2
      library/Zend/Acl.php
  2. 16 0
      tests/Zend/Acl/AclTest.php
  3. 16 0
      tests/Zend/Acl/_files/AssertionZF7973.php

+ 10 - 2
library/Zend/Acl.php

@@ -103,6 +103,11 @@ class Zend_Acl
     protected $_isAllowedResource = null;
 
     /**
+     * @var String
+     */
+    protected $_isAllowedPrivilege = null;
+
+    /**
      * ACL rules; whitelist (deny everything to all) by default
      *
      * @var array
@@ -750,7 +755,9 @@ class Zend_Acl
     public function isAllowed($role = null, $resource = null, $privilege = null)
     {
         // reset role & resource to null
-        $this->_isAllowedRole = $this->_isAllowedResource = null;
+        $this->_isAllowedRole = null;
+        $this->_isAllowedResource = null;
+        $this->_isAllowedPrivilege = null;
 
         if (null !== $role) {
             // keep track of originally called role
@@ -795,6 +802,7 @@ class Zend_Acl
 
             } while (true); // loop terminates at 'allResources' pseudo-parent
         } else {
+            $this->_isAllowedPrivilege = $privilege;
             // query on one privilege
             do {
                 // depth-first search on $role if it is not 'allRoles' pseudo-parent
@@ -1050,7 +1058,7 @@ class Zend_Acl
                 $this,
                 ($this->_isAllowedRole instanceof Zend_Acl_Role_Interface) ? $this->_isAllowedRole : $role,
                 ($this->_isAllowedResource instanceof Zend_Acl_Resource_Interface) ? $this->_isAllowedResource : $resource,
-                $privilege
+                $this->_isAllowedPrivilege
                 );
         }
 

+ 16 - 0
tests/Zend/Acl/AclTest.php

@@ -1257,4 +1257,20 @@ class Zend_Acl_AclTest extends PHPUnit_Framework_TestCase
         $resource = new Zend_Acl_Resource('_fooBar_');  
         $this->assertEquals('_fooBar_',(string)$resource);
     }
+
+    /**
+     * @group ZF-7973
+     */
+    public function testAclPassesPrivilegeToAssertClass() {
+        require_once dirname(__FILE__) . '/_files/AssertionZF7973.php';
+        $assertion = new Zend_Acl_AclTest_AssertionZF7973();
+
+        $acl = new Zend_Acl();
+        $acl->addRole('role');
+        $acl->addResource('resource');
+        $acl->allow('role',null,null,$assertion);
+        $allowed = $acl->isAllowed('role','resource','privilege',$assertion);
+
+        $this->assertTrue($allowed);
+    }
 }

+ 16 - 0
tests/Zend/Acl/_files/AssertionZF7973.php

@@ -0,0 +1,16 @@
+<?php
+require_once 'Zend/Acl/Assert/Interface.php';
+
+class Zend_Acl_AclTest_AssertionZF7973 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($privilege != 'privilege') {
+    		return false;
+    	}
+    	
+    	return true;
+    }
+}