2
0
Просмотр исходного кода

ZF-9643
- Fixed issue with removeAllow / removeDeny will null/all resources does not apply to all resources

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@22580 44c647ce-9c0f-0410-b52a-842ac1e357ba

ralph 15 лет назад
Родитель
Сommit
9f9c216897
2 измененных файлов с 64 добавлено и 0 удалено
  1. 8 0
      library/Zend/Acl.php
  2. 56 0
      tests/Zend/Acl/AclTest.php

+ 8 - 0
library/Zend/Acl.php

@@ -534,6 +534,10 @@ class Zend_Acl
      */
     public function removeAllow($roles = null, $resources = null, $privileges = null)
     {
+        if ($resources == null) {
+            $resources = array_keys($this->_resources);
+        }
+        
         return $this->setRule(self::OP_REMOVE, self::TYPE_ALLOW, $roles, $resources, $privileges);
     }
 
@@ -548,6 +552,10 @@ class Zend_Acl
      */
     public function removeDeny($roles = null, $resources = null, $privileges = null)
     {
+        if ($resources == null) {
+            $resources = array_keys($this->_resources);
+        }
+        
         return $this->setRule(self::OP_REMOVE, self::TYPE_DENY, $roles, $resources, $privileges);
     }
 

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

@@ -1300,5 +1300,61 @@ class Zend_Acl_AclTest extends PHPUnit_Framework_TestCase
         $expected = array('someResource', 'someOtherResource');
         $this->assertEquals($expected, $this->_acl->getResources());
     }
+    
+    /**
+     * @group ZF-9643
+     */
+    public function testRemoveAllowWithNullResourceAppliesToAllResources()
+    {
+        $this->_acl->addRole('guest');
+        $this->_acl->addResource('blogpost');
+        $this->_acl->addResource('newsletter');
+        $this->_acl->allow('guest', 'blogpost', 'read');
+        $this->_acl->allow('guest', 'newsletter', 'read');
+        $this->assertTrue($this->_acl->isAllowed('guest', 'blogpost', 'read'));
+        $this->assertTrue($this->_acl->isAllowed('guest', 'newsletter', 'read'));
+
+        $this->_acl->removeAllow('guest', 'newsletter', 'read');
+        $this->assertTrue($this->_acl->isAllowed('guest', 'blogpost', 'read'));
+        $this->assertFalse($this->_acl->isAllowed('guest', 'newsletter', 'read'));
+        
+        $this->_acl->removeAllow('guest', null, 'read');
+        $this->assertFalse($this->_acl->isAllowed('guest', 'blogpost', 'read'));
+        $this->assertFalse($this->_acl->isAllowed('guest', 'newsletter', 'read'));
+        
+        // ensure allow null/all resoures works
+        $this->_acl->allow('guest', null, 'read');
+        $this->assertTrue($this->_acl->isAllowed('guest', 'blogpost', 'read'));
+        $this->assertTrue($this->_acl->isAllowed('guest', 'newsletter', 'read'));
+    }
 
+    /**
+     * @group ZF-9643
+     */
+    public function testRemoveDenyWithNullResourceAppliesToAllResources()
+    {
+        $this->_acl->addRole('guest');
+        $this->_acl->addResource('blogpost');
+        $this->_acl->addResource('newsletter');
+        
+        $this->_acl->allow();
+        $this->_acl->deny('guest', 'blogpost', 'read');
+        $this->_acl->deny('guest', 'newsletter', 'read');
+        $this->assertFalse($this->_acl->isAllowed('guest', 'blogpost', 'read'));
+        $this->assertFalse($this->_acl->isAllowed('guest', 'newsletter', 'read'));
+
+        $this->_acl->removeDeny('guest', 'newsletter', 'read');
+        $this->assertFalse($this->_acl->isAllowed('guest', 'blogpost', 'read'));
+        $this->assertTrue($this->_acl->isAllowed('guest', 'newsletter', 'read'));
+        
+        $this->_acl->removeDeny('guest', null, 'read');
+        $this->assertTrue($this->_acl->isAllowed('guest', 'blogpost', 'read'));
+        $this->assertTrue($this->_acl->isAllowed('guest', 'newsletter', 'read'));
+        
+        // ensure deny null/all resources works
+        $this->_acl->deny('guest', null, 'read');
+        $this->assertFalse($this->_acl->isAllowed('guest', 'blogpost', 'read'));
+        $this->assertFalse($this->_acl->isAllowed('guest', 'newsletter', 'read'));
+    }
+    
 }