Kaynağa Gözat

ZF-7467 & ZF-1167
- Added Zend_Acl::addResource() for consistency
- Changed addResource & addRole to accept string of id

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

ralph 16 yıl önce
ebeveyn
işleme
26632ccea5
2 değiştirilmiş dosya ile 78 ekleme ve 3 silme
  1. 41 3
      library/Zend/Acl.php
  2. 37 0
      tests/Zend/Acl/AclTest.php

+ 41 - 3
library/Zend/Acl.php

@@ -128,8 +128,18 @@ class Zend_Acl
      * @uses   Zend_Acl_Role_Registry::add()
      * @return Zend_Acl Provides a fluent interface
      */
-    public function addRole(Zend_Acl_Role_Interface $role, $parents = null)
+    public function addRole($role, $parents = null)
     {
+        if (is_string($role)) {
+            $role = new Zend_Acl_Role($role);
+        }
+        
+        if (!$role instanceof Zend_Acl_Role_Interface) {
+            require_once 'Zend/Acl/Exception.php';
+            throw new Zend_Acl_Exception('addRole() expects $role to be of type Zend_Acl_Role_Interface');
+        }
+    	
+    	
         $this->_getRoleRegistry()->add($role, $parents);
 
         return $this;
@@ -246,13 +256,22 @@ class Zend_Acl
      * The $parent parameter may be a reference to, or the string identifier for,
      * the existing Resource from which the newly added Resource will inherit.
      *
-     * @param  Zend_Acl_Resource_Interface        $resource
+     * @param  Zend_Acl_Resource_Interface|string $resource
      * @param  Zend_Acl_Resource_Interface|string $parent
      * @throws Zend_Acl_Exception
      * @return Zend_Acl Provides a fluent interface
      */
-    public function add(Zend_Acl_Resource_Interface $resource, $parent = null)
+    public function addResource($resource, $parent = null)
     {
+    	if (is_string($resource)) {
+    		$resource = new Zend_Acl_Resource($resource);
+    	}
+    	
+    	if (!$resource instanceof Zend_Acl_Resource_Interface) {
+            require_once 'Zend/Acl/Exception.php';
+            throw new Zend_Acl_Exception('addResource() expects $resource to be of type Zend_Acl_Resource_Interface');
+    	}
+    	
         $resourceId = $resource->getResourceId();
 
         if ($this->has($resourceId)) {
@@ -284,6 +303,25 @@ class Zend_Acl
 
         return $this;
     }
+    
+    /**
+     * Adds a Resource having an identifier unique to the ACL
+     *
+     * The $parent parameter may be a reference to, or the string identifier for,
+     * the existing Resource from which the newly added Resource will inherit.
+     *
+     * @deprecated in version 1.9.1 and will be available till 2.0.  New code
+     *             should use addResource() instead.
+     * 
+     * @param  Zend_Acl_Resource_Interface        $resource
+     * @param  Zend_Acl_Resource_Interface|string $parent
+     * @throws Zend_Acl_Exception
+     * @return Zend_Acl Provides a fluent interface
+     */
+    public function add(Zend_Acl_Resource_Interface $resource, $parent = null)
+    {
+        return $this->addResource($resource, $parent);
+    }
 
     /**
      * Returns the identified Resource

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

@@ -89,6 +89,17 @@ class Zend_Acl_AclTest extends PHPUnit_Framework_TestCase
     }
 
     /**
+     * Ensures that basic addition and retrieval of a single Resource works
+     */
+    public function testRoleAddAndGetOneByString()
+    {
+        $role = $this->_acl->addRole('area')
+                          ->getRole('area');
+        $this->assertType('Zend_Acl_Role', $role);
+        $this->assertEquals('area', $role->getRoleId());
+    }
+    
+    /**
      * Ensures that basic removal of a single Role works
      *
      * @return void
@@ -280,6 +291,32 @@ class Zend_Acl_AclTest extends PHPUnit_Framework_TestCase
         $resource = $this->_acl->get($resourceArea);
         $this->assertTrue($resourceArea === $resource);
     }
+    
+    /**
+     * Ensures that basic addition and retrieval of a single Resource works
+     */
+    public function testResourceAddAndGetOneByString()
+    {
+        $resource = $this->_acl->addResource('area')
+                          ->get('area');
+        $this->assertType('Zend_Acl_Resource', $resource);
+        $this->assertEquals('area', $resource->getResourceId());
+    }
+    
+    /**
+     * Ensures that basic addition and retrieval of a single Resource works
+     *
+     * @group ZF-1167
+     */
+    public function testResourceAddAndGetOneWithAddResourceMethod()
+    {
+        $resourceArea = new Zend_Acl_Resource('area');
+        $resource = $this->_acl->addResource($resourceArea)
+                          ->get($resourceArea->getResourceId());
+        $this->assertTrue($resourceArea === $resource);
+        $resource = $this->_acl->get($resourceArea);
+        $this->assertTrue($resourceArea === $resource);
+    }
 
     /**
      * Ensures that basic removal of a single Resource works