From 820f840ce3b4d0286ae9b366ecac2281b92de7ea Mon Sep 17 00:00:00 2001 From: Panagiotis Moustafellos Date: Sat, 23 Nov 2013 15:30:15 +0200 Subject: [PATCH 1/5] added revokeAll() test --- tests/unit/framework/rbac/ManagerTestCase.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/unit/framework/rbac/ManagerTestCase.php b/tests/unit/framework/rbac/ManagerTestCase.php index 3bf80ad..d508850 100644 --- a/tests/unit/framework/rbac/ManagerTestCase.php +++ b/tests/unit/framework/rbac/ManagerTestCase.php @@ -119,6 +119,12 @@ abstract class ManagerTestCase extends TestCase $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() { $this->auth->assign('author B', 'deletePost'); @@ -201,6 +207,13 @@ abstract class ManagerTestCase extends TestCase 'updateOwnPost' => false, 'deletePost' => true, ], + 'reader E' => [ + 'createPost' => false, + 'readPost' => false, + 'updatePost' => false, + 'updateOwnPost' => false, + 'deletePost' => false, + ], ]; $params = ['authorID' => 'author B']; @@ -245,5 +258,6 @@ abstract class ManagerTestCase extends TestCase $this->auth->assign('author B', 'author'); $this->auth->assign('editor C', 'editor'); $this->auth->assign('admin D', 'admin'); + $this->auth->assign('reader E', 'reader'); } } From e16fb9596b965166e2db2ff7721a8ad902019b7c Mon Sep 17 00:00:00 2001 From: Panagiotis Moustafellos Date: Sat, 23 Nov 2013 18:21:26 +0200 Subject: [PATCH 2/5] indentation fix --- tests/unit/framework/rbac/ManagerTestCase.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/unit/framework/rbac/ManagerTestCase.php b/tests/unit/framework/rbac/ManagerTestCase.php index d508850..cbf8de8 100644 --- a/tests/unit/framework/rbac/ManagerTestCase.php +++ b/tests/unit/framework/rbac/ManagerTestCase.php @@ -119,11 +119,11 @@ abstract class ManagerTestCase extends TestCase $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 testRevokeAll() + { + $this->assertTrue($this->auth->revokeAll('reader E')); + $this->assertFalse($this->auth->isAssigned('reader E', 'reader')); + } public function testGetAssignments() { @@ -258,6 +258,6 @@ abstract class ManagerTestCase extends TestCase $this->auth->assign('author B', 'author'); $this->auth->assign('editor C', 'editor'); $this->auth->assign('admin D', 'admin'); - $this->auth->assign('reader E', 'reader'); + $this->auth->assign('reader E', 'reader'); } } From 8eb3b53f2a5f9846293401fb328c847116d82512 Mon Sep 17 00:00:00 2001 From: Panagiotis Moustafellos Date: Sat, 23 Nov 2013 18:35:28 +0200 Subject: [PATCH 3/5] added abstract function revokeAll() --- framework/yii/rbac/Manager.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/framework/yii/rbac/Manager.php b/framework/yii/rbac/Manager.php index 1710a77..a1bf47a 100644 --- a/framework/yii/rbac/Manager.php +++ b/framework/yii/rbac/Manager.php @@ -269,6 +269,12 @@ abstract class Manager extends Component */ 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. * @param mixed $userId the user ID (see [[User::id]]) * @param string $itemName the item name From 234feabaac090c3e34a7f19ee7110f7aa6093d65 Mon Sep 17 00:00:00 2001 From: Panagiotis Moustafellos Date: Sat, 23 Nov 2013 18:36:19 +0200 Subject: [PATCH 4/5] revokeAll() implementation for DbManager --- framework/yii/rbac/DbManager.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/framework/yii/rbac/DbManager.php b/framework/yii/rbac/DbManager.php index 0e1f8cc..87d11ce 100644 --- a/framework/yii/rbac/DbManager.php +++ b/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. * @param mixed $userId the user ID (see [[User::id]]) * @param string $itemName the item name From ec37003a9aca87c4672f0729d7d8de538396a058 Mon Sep 17 00:00:00 2001 From: Panagiotis Moustafellos Date: Sat, 23 Nov 2013 18:36:40 +0200 Subject: [PATCH 5/5] revokeAll() implementation for PhpManager --- framework/yii/rbac/PhpManager.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/framework/yii/rbac/PhpManager.php b/framework/yii/rbac/PhpManager.php index a91d9bd..f3a68b5 100644 --- a/framework/yii/rbac/PhpManager.php +++ b/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. * @param mixed $userId the user ID (see [[User::id]]) * @param string $itemName the item name