Browse Source

Merge pull request #1304 from pmoust/revokeAll

implements #563 - revokeAll()
tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
04739a0876
  1. 12
      framework/yii/rbac/DbManager.php
  2. 6
      framework/yii/rbac/Manager.php
  3. 16
      framework/yii/rbac/PhpManager.php
  4. 14
      tests/unit/framework/rbac/ManagerTestCase.php

12
framework/yii/rbac/DbManager.php

@ -277,6 +277,18 @@ class DbManager extends Manager
} }
/** /**
* Revokes all authorization assignments from a user.
* @param mixed $userId the user ID (see [[User::id]])
* @return boolean whether removal is successful
*/
public function revokeAll($userId)
{
return $this->db->createCommand()
->delete($this->assignmentTable, ['user_id' => $userId])
->execute() > 0;
}
/**
* Returns a value indicating whether the item has been assigned to the user. * Returns a value indicating whether the item has been assigned to the user.
* @param mixed $userId the user ID (see [[User::id]]) * @param mixed $userId the user ID (see [[User::id]])
* @param string $itemName the item name * @param string $itemName the item name

6
framework/yii/rbac/Manager.php

@ -269,6 +269,12 @@ abstract class Manager extends Component
*/ */
abstract public function revoke($userId, $itemName); abstract public function revoke($userId, $itemName);
/** /**
* Revokes all authorization assignments from a user.
* @param mixed $userId the user ID (see [[User::id]])
* @return boolean whether removal is successful
*/
abstract public function revokeAll($userId);
/**
* Returns a value indicating whether the item has been assigned to the user. * Returns a value indicating whether the item has been assigned to the user.
* @param mixed $userId the user ID (see [[User::id]]) * @param mixed $userId the user ID (see [[User::id]])
* @param string $itemName the item name * @param string $itemName the item name

16
framework/yii/rbac/PhpManager.php

@ -221,6 +221,22 @@ class PhpManager extends Manager
} }
/** /**
* Revokes all authorization assignments from a user.
* @param mixed $userId the user ID (see [[User::id]])
* @return boolean whether removal is successful
*/
public function revokeAll($userId)
{
if (isset($this->_assignments[$userId]) && is_array($this->_assignments[$userId])) {
foreach ($this->_assignments[$userId] as $itemName => $value)
unset($this->_assignments[$userId][$itemName]);
return true;
} else {
return false;
}
}
/**
* Returns a value indicating whether the item has been assigned to the user. * Returns a value indicating whether the item has been assigned to the user.
* @param mixed $userId the user ID (see [[User::id]]) * @param mixed $userId the user ID (see [[User::id]])
* @param string $itemName the item name * @param string $itemName the item name

14
tests/unit/framework/rbac/ManagerTestCase.php

@ -119,6 +119,12 @@ abstract class ManagerTestCase extends TestCase
$this->assertFalse($this->auth->revoke('author B', 'author')); $this->assertFalse($this->auth->revoke('author B', 'author'));
} }
public function testRevokeAll()
{
$this->assertTrue($this->auth->revokeAll('reader E'));
$this->assertFalse($this->auth->isAssigned('reader E', 'reader'));
}
public function testGetAssignments() public function testGetAssignments()
{ {
$this->auth->assign('author B', 'deletePost'); $this->auth->assign('author B', 'deletePost');
@ -201,6 +207,13 @@ abstract class ManagerTestCase extends TestCase
'updateOwnPost' => false, 'updateOwnPost' => false,
'deletePost' => true, 'deletePost' => true,
], ],
'reader E' => [
'createPost' => false,
'readPost' => false,
'updatePost' => false,
'updateOwnPost' => false,
'deletePost' => false,
],
]; ];
$params = ['authorID' => 'author B']; $params = ['authorID' => 'author B'];
@ -245,5 +258,6 @@ abstract class ManagerTestCase extends TestCase
$this->auth->assign('author B', 'author'); $this->auth->assign('author B', 'author');
$this->auth->assign('editor C', 'editor'); $this->auth->assign('editor C', 'editor');
$this->auth->assign('admin D', 'admin'); $this->auth->assign('admin D', 'admin');
$this->auth->assign('reader E', 'reader');
} }
} }

Loading…
Cancel
Save