Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding ActionsAuthorize. It implements using Acl as the authorization…
… object.
- Loading branch information
Showing
2 changed files
with
169 additions
and
0 deletions.
There are no files selected for viewing
39 changes: 39 additions & 0 deletions
39
cake/libs/controller/components/auth/actions_authorize.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
<?php | ||
/** | ||
* PHP 5 | ||
* | ||
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | ||
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* | ||
* Licensed under The MIT License | ||
* Redistributions of files must retain the above copyright notice. | ||
* | ||
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) | ||
* @link http://cakephp.org CakePHP(tm) Project | ||
* @license MIT License (http://www.opensource.org/licenses/mit-license.php) | ||
*/ | ||
App::import('Component', 'auth/base_authorize'); | ||
|
||
/** | ||
* An authorization adapter for AuthComponent. Provides the ability to authorize using the AclComponent, | ||
* If AclComponent is not already loaded it will be loaded using the Controller's ComponentCollection. | ||
* | ||
* @package cake.libs.controller.components.auth | ||
* @since 2.0 | ||
* @see AuthComponent::$authenticate | ||
* @see AclComponent::check() | ||
*/ | ||
class ActionsAuthorize extends BaseAuthorize { | ||
|
||
/** | ||
* Authorize a user using the AclComponent. | ||
* | ||
* @param array $user The user to authorize | ||
* @param CakeRequest $request The request needing authorization. | ||
* @return boolean | ||
*/ | ||
public function authorize($user, CakeRequest $request) { | ||
$Acl = $this->_controller->Components->load('Acl'); | ||
return $Acl->check($user, $this->action($request)); | ||
} | ||
} |
130 changes: 130 additions & 0 deletions
130
cake/tests/cases/libs/controller/components/auth/actions_authorize.test.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
<?php | ||
|
||
App::import('Component', 'auth/actions_authorize'); | ||
App::import('Controller', 'ComponentCollection'); | ||
App::import('Component', 'Acl'); | ||
App::import('Core', 'CakeRequest'); | ||
App::import('Core', 'Controller'); | ||
|
||
class ActionsAuthorizeTest extends CakeTestCase { | ||
|
||
/** | ||
* setup | ||
* | ||
* @return void | ||
*/ | ||
function setUp() { | ||
parent::setUp(); | ||
$this->controller = $this->getMock('Controller', array(), array(), '', false); | ||
$this->Acl = $this->getMock('AclComponent', array(), array(), '', false); | ||
$this->controller->Components = $this->getMock('ComponentCollection'); | ||
|
||
$this->auth = new ActionsAuthorize($this->controller); | ||
$this->auth->actionPath = '/controllers'; | ||
} | ||
|
||
/** | ||
* setup the mock acl. | ||
* | ||
* @return void | ||
*/ | ||
protected function _mockAcl() { | ||
$this->controller->Components->expects($this->any()) | ||
->method('load') | ||
->with('Acl') | ||
->will($this->returnValue($this->Acl)); | ||
} | ||
|
||
/** | ||
* test failure | ||
* | ||
* @return void | ||
*/ | ||
function testAuthorizeFailure() { | ||
$user = array( | ||
'User' => array( | ||
'id' => 1, | ||
'user' => 'mariano' | ||
) | ||
); | ||
$request = new CakeRequest('/posts/index', false); | ||
$request->addParams(array( | ||
'plugin' => null, | ||
'controller' => 'posts', | ||
'action' => 'index' | ||
)); | ||
|
||
$this->_mockAcl(); | ||
|
||
$this->Acl->expects($this->once()) | ||
->method('check') | ||
->with($user, '/controllers/Posts/index') | ||
->will($this->returnValue(false)); | ||
|
||
$this->assertFalse($this->auth->authorize($user, $request)); | ||
} | ||
|
||
/** | ||
* test isAuthorized working. | ||
* | ||
* @return void | ||
*/ | ||
function testAuthorizeSuccess() { | ||
$user = array( | ||
'User' => array( | ||
'id' => 1, | ||
'user' => 'mariano' | ||
) | ||
); | ||
$request = new CakeRequest('/posts/index', false); | ||
$request->addParams(array( | ||
'plugin' => null, | ||
'controller' => 'posts', | ||
'action' => 'index' | ||
)); | ||
|
||
$this->_mockAcl(); | ||
|
||
$this->Acl->expects($this->once()) | ||
->method('check') | ||
->with($user, '/controllers/Posts/index') | ||
->will($this->returnValue(true)); | ||
|
||
$this->assertTrue($this->auth->authorize($user, $request)); | ||
} | ||
|
||
/** | ||
* test action() | ||
* | ||
* @return void | ||
*/ | ||
function testActionMethod() { | ||
$request = new CakeRequest('/posts/index', false); | ||
$request->addParams(array( | ||
'plugin' => null, | ||
'controller' => 'posts', | ||
'action' => 'index' | ||
)); | ||
|
||
$result = $this->auth->action($request); | ||
|
||
$this->assertEquals('/controllers/Posts/index', $result); | ||
} | ||
|
||
/** | ||
* test action() and plugins | ||
* | ||
* @return void | ||
*/ | ||
function testActionWithPlugin() { | ||
$request = new CakeRequest('/debug_kit/posts/index', false); | ||
$request->addParams(array( | ||
'plugin' => 'debug_kit', | ||
'controller' => 'posts', | ||
'action' => 'index' | ||
)); | ||
|
||
$result = $this->auth->action($request); | ||
$this->assertEquals('/controllers/DebugKit/Posts/index', $result); | ||
} | ||
} |