浏览代码

ZF-1722
- Added failing test case for broken acl assertions when objects are queried with

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

ralph 16 年之前
父节点
当前提交
2a133ca759

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

@@ -1093,7 +1093,55 @@ class Zend_Acl_AclTest extends PHPUnit_Framework_TestCase
             $this->assertEquals('$dfs parameter may not be null', $e->getMessage());
         }
     }
+    
+    /**
+     * 
+     * @group ZF-1722
+     */
+    public function testAclAssertionsGetOriginalIsAllowedObjects()
+    {
+    	$acl = $this->_loadUseCase1();
+    	
+    	$user = new Zend_Acl_UseCase1_User();
+    	$blogPost = new Zend_Acl_UseCase1_BlogPost();
+    	
+    	$this->assertTrue($acl->isAllowed($user, $blogPost, 'view'));
+    	
+    	/**
+    	 * @var Zend_Acl_UseCase1_UserIsBlogPostOwnerAssertion
+    	 */
+    	$assertion = $acl->customAssertion;
+    	
+    	$assertion->assertReturnValue = true;
+    	$user->role = 'contributor';
+    	$this->assertTrue($acl->isAllowed($user, $blogPost, 'modify'), 'Assertion should return true');
+    	$assertion->assertReturnValue = false;
+    	$this->assertFalse($acl->isAllowed($user, $blogPost, 'modify'), 'Assertion should return false');
+
+    	// check to see if the last assertion has the proper objets
+    	$this->assertType('Zend_Acl_UseCase1_User', $assertion->lastAssertRole, 'Assertion did not recieve proper role object');
+    	$this->assertType('Zend_Acl_UseCase1_BlogPost', $assertion->lastAssertResource, 'Assertion did not recieve proper resource object');
+
+    }
 
+    /**
+     * 
+     * @return Zend_Acl_UseCase1_Acl
+     */
+    protected function _loadUseCase1()
+    {
+    	if (class_exists('Zend_Acl_UseCase1_User')) {
+    		return;
+    	}
+    	
+    	require_once dirname(__FILE__) . '/_files/UseCase1/User.php';
+    	require_once dirname(__FILE__) . '/_files/UseCase1/BlogPost.php';
+    	require_once dirname(__FILE__) . '/_files/UseCase1/UserIsBlogPostOwnerAssertion.php';
+    	require_once dirname(__FILE__) . '/_files/UseCase1/Acl.php';
+    	
+    	return new Zend_Acl_UseCase1_Acl();
+    }
+    
 }
 
 

+ 23 - 0
tests/Zend/Acl/_files/UseCase1/Acl.php

@@ -0,0 +1,23 @@
+<?php
+
+class Zend_Acl_UseCase1_Acl extends Zend_Acl
+{
+	
+	public $customAssertion = null;
+	
+	public function __construct()
+	{
+		$this->customAssertion = new Zend_Acl_UseCase1_UserIsBlogPostOwnerAssertion();
+		
+		$this->addRole(new Zend_Acl_Role('guest'));                    // $acl->addRole('guest');
+		$this->addRole(new Zend_Acl_Role('contributor'), 'guest');     // $acl->addRole('contributor', 'guest');
+		$this->addRole(new Zend_Acl_Role('publisher'), 'contributor'); // $acl->addRole('publisher', 'contributor'); 
+		$this->addRole(new Zend_Acl_Role('admin'));                    // $acl->addRole('admin');
+		$this->add(new Zend_Acl_Resource('blogPost'));                 // $acl->addResource('blogPost');
+		$this->allow('guest', 'blogPost', 'view');
+		$this->allow('contributor', 'blogPost', 'contribute');
+		$this->allow('contributor', 'blogPost', 'modify', $this->customAssertion);
+		$this->allow('publisher', 'blogPost', 'publish');
+	}
+	
+}

+ 10 - 0
tests/Zend/Acl/_files/UseCase1/BlogPost.php

@@ -0,0 +1,10 @@
+<?php
+
+class Zend_Acl_UseCase1_BlogPost implements Zend_Acl_Resource_Interface
+{
+    public $owner = null;
+    public function getResourceId()
+    {
+        return 'blogPost';
+    }
+}

+ 10 - 0
tests/Zend/Acl/_files/UseCase1/User.php

@@ -0,0 +1,10 @@
+<?php
+
+class Zend_Acl_UseCase1_User implements Zend_Acl_Role_Interface
+{
+    public $role = 'guest';
+    public function getRoleId()
+    {
+        return $this->role;
+    }
+}

+ 18 - 0
tests/Zend/Acl/_files/UseCase1/UserIsBlogPostOwnerAssertion.php

@@ -0,0 +1,18 @@
+<?php
+
+class Zend_Acl_UseCase1_UserIsBlogPostOwnerAssertion implements Zend_Acl_Assert_Interface
+{
+	
+	public $lastAssertRole = null;
+	public $lastAssertResource = null;
+	public $lastAssertPrivilege = null;
+	public $assertReturnValue = true;
+	
+    public function assert(Zend_Acl $acl, Zend_Acl_Role_Interface $user = null, Zend_Acl_Resource_Interface $blogPost = null, $privilege = null)
+    {
+        $this->lastAssertRole = $user;
+        $this->lastAssertResource = $blogPost;
+        $this->lastAssertPrivilege = $privilege;
+        return $this->assertReturnValue;
+    }
+}