/** * @return \yii\db\ActiveQuery */ public function getRbacUserRoles() { return $this->hasMany(RbacUserRole::className(), ['rbac_role_id' => 'id']); }
/** * Assign right to the current user */ public function assignUserAuth() { $cacheKey = 'user_auth:' . $this->getId(); $auth = Yii::$app->commonCache->get($cacheKey); if ($auth === false) { $rbacUserRoles = RbacUserRole::find()->where(['user_id' => $this->id])->with(['rbacRole' => function ($query) { $query->select(['id', 'name', 'rule_path']); }, 'rbacRole.rbacRolePermissions', 'rbacRole.rbacRolePermissions.rbacPermission'])->all(); $auth = ['items' => [], 'rules' => []]; foreach ($rbacUserRoles as $rbacUserRole) { $roleName = 'role.' . $rbacUserRole->rbacRole->name; if (!isset($auth['items'][$roleName])) { $auth['items'][$roleName] = new Role(['name' => $roleName]); if ($rbacUserRole->rbacRole->rule_path != '') { $rule = new $rbacUserRole->rbacRole->rule_path(); if (!isset($auth['rules'][$rule->name])) { $auth['rules'][$rule->name] = $rule; } $auth['items'][$roleName]->ruleName = $rule->name; unset($rule); } } if (isset($rbacUserRole->rbacRole->rbacRolePermissions)) { foreach ($rbacUserRole->rbacRole->rbacRolePermissions as $rbacRolePermission) { $permissionName = 'permission.' . $rbacRolePermission->rbacPermission->name; if (!isset($auth['items'][$permissionName])) { $auth['items'][$permissionName] = new Permission(['name' => $permissionName]); } if ($rbacRolePermission->rbacPermission->rule_path != '' && class_exists($rbacRolePermission->rbacPermission->rule_path)) { $rule = new $rbacRolePermission->rbacPermission->rule_path(); if (!isset($auth['rules'][$rule->name])) { $auth['rules'][$rule->name] = $rule; } $auth['items'][$permissionName]->ruleName = $rule->name; unset($rule); } } } } Yii::$app->commonCache->set($cacheKey, $auth, $this->cacheDuration, new TagDependency(['tags' => [self::getCacheTag(), self::getCacheTag($this->id)]])); } $this->items = $auth['items']; $this->rules = $auth['rules']; }