From 3a4505ac08997b8b9c7a5c63d549fa9cc4201da6 Mon Sep 17 00:00:00 2001 From: Elvira Sheina Date: Wed, 15 Feb 2017 00:26:33 +0200 Subject: [PATCH] Fixes #11230: Include `defaultRoles` in `yii\rbac\DbManager->getRolesByUser()` results --- framework/CHANGELOG.md | 1 + framework/rbac/BaseManager.php | 14 ++++++++++++++ framework/rbac/DbManager.php | 2 +- framework/rbac/PhpManager.php | 2 +- tests/framework/rbac/DbManagerTestCase.php | 2 +- tests/framework/rbac/ManagerTestCase.php | 2 ++ tests/framework/rbac/MySQLManagerCacheTest.php | 1 + tests/framework/rbac/PhpManagerTest.php | 1 + 8 files changed, 22 insertions(+), 3 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 69b854c..ff1e584 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -7,6 +7,7 @@ Yii Framework 2 Change Log - Enh #13523: Plural rule for pasta (developeruz) - Bug #13538: Fixed `yii\db\BaseActiveRecord::deleteAll()` changes method signature declared by `yii\db\ActiveRecordInterface::deleteAll()` (klimov-paul) - Enh #13278: `yii\caching\DbQueryDependency` created allowing specification of the cache dependency via `yii\db\QueryInterface` (klimov-paul) +- Bug #11230: Include `defaultRoles` in `yii\rbac\DbManager->getRolesByUser()` results (developeruz) 2.0.11.2 February 08, 2017 diff --git a/framework/rbac/BaseManager.php b/framework/rbac/BaseManager.php index 37b54dc..879215f 100644 --- a/framework/rbac/BaseManager.php +++ b/framework/rbac/BaseManager.php @@ -190,6 +190,20 @@ abstract class BaseManager extends Component implements ManagerInterface } /** + * Returns defaultRoles as array of Role objects + * @since 2.0.12 + * @return Role[] default roles. The array is indexed by the role names + */ + public function getDefaultRoles() + { + $result = []; + foreach ($this->defaultRoles as $roleName) { + $result[$roleName] = $this->createRole($roleName); + } + return $result; + } + + /** * @inheritdoc */ public function getPermissions() diff --git a/framework/rbac/DbManager.php b/framework/rbac/DbManager.php index 9d13f45..b66f6e4 100644 --- a/framework/rbac/DbManager.php +++ b/framework/rbac/DbManager.php @@ -466,7 +466,7 @@ class DbManager extends BaseManager ->andWhere(['a.user_id' => (string) $userId]) ->andWhere(['b.type' => Item::TYPE_ROLE]); - $roles = []; + $roles = $this->getDefaultRoles(); foreach ($query->all($this->db) as $row) { $roles[$row['name']] = $this->populateItem($row); } diff --git a/framework/rbac/PhpManager.php b/framework/rbac/PhpManager.php index 71cce73..fcb3281 100644 --- a/framework/rbac/PhpManager.php +++ b/framework/rbac/PhpManager.php @@ -392,7 +392,7 @@ class PhpManager extends BaseManager */ public function getRolesByUser($userId) { - $roles = []; + $roles = $this->getDefaultRoles(); foreach ($this->getAssignments($userId) as $name => $assignment) { $role = $this->items[$assignment->roleName]; if ($role->type === Item::TYPE_ROLE) { diff --git a/tests/framework/rbac/DbManagerTestCase.php b/tests/framework/rbac/DbManagerTestCase.php index 02ea4f8..4493c4b 100644 --- a/tests/framework/rbac/DbManagerTestCase.php +++ b/tests/framework/rbac/DbManagerTestCase.php @@ -114,6 +114,6 @@ abstract class DbManagerTestCase extends ManagerTestCase */ protected function createManager() { - return new DbManager(['db' => $this->getConnection()]); + return new DbManager(['db' => $this->getConnection(), 'defaultRoles' => ['myDefaultRole']]); } } diff --git a/tests/framework/rbac/ManagerTestCase.php b/tests/framework/rbac/ManagerTestCase.php index 70c30b1..2d77399 100644 --- a/tests/framework/rbac/ManagerTestCase.php +++ b/tests/framework/rbac/ManagerTestCase.php @@ -299,6 +299,8 @@ abstract class ManagerTestCase extends TestCase $roles = $this->auth->getRolesByUser(123); $this->assertTrue(reset($roles) instanceof Role); $this->assertEquals($roles['reader']->name, 'reader'); + + $this->assertContains('myDefaultRole', array_keys($roles)); } public function testGetChildRoles() diff --git a/tests/framework/rbac/MySQLManagerCacheTest.php b/tests/framework/rbac/MySQLManagerCacheTest.php index 615b137..d54218b 100644 --- a/tests/framework/rbac/MySQLManagerCacheTest.php +++ b/tests/framework/rbac/MySQLManagerCacheTest.php @@ -19,6 +19,7 @@ class MySQLManagerCacheTest extends MySQLManagerTest return new DbManager([ 'db' => $this->getConnection(), 'cache' => new FileCache(['cachePath' => '@yiiunit/runtime/cache']), + 'defaultRoles' => ['myDefaultRole'] ]); } } diff --git a/tests/framework/rbac/PhpManagerTest.php b/tests/framework/rbac/PhpManagerTest.php index fe198e8..64a05f6 100644 --- a/tests/framework/rbac/PhpManagerTest.php +++ b/tests/framework/rbac/PhpManagerTest.php @@ -64,6 +64,7 @@ class PhpManagerTest extends ManagerTestCase 'itemFile' => $this->getItemFile(), 'assignmentFile' => $this->getAssignmentFile(), 'ruleFile' => $this->getRuleFile(), + 'defaultRoles' => ['myDefaultRole'] ]); }