/** * 获取用户所有的操作、自定义的授权项,缓存半小时,用于防止缓存被集中请求 * @param int $userId * @param boolean $useCache * @return array */ public static function getUserOperationAuthItems($userId, $useCache = true) { //获取RBAC权限使用的cache名字 $cacheComponents = Yii::$app->getModule('rbac')->cacheComponents; $cachekey = 'UserAuthItems_userId_' . $userId; $items = []; //所有权限 // 如果使用cache优先从cache读取 if ($useCache) { $items = Yii::$app->{$cacheComponents}->get($cachekey); } // 如果未使用cache或从cache中未读出值,则到数据库读取,并缓存起来。 if (!$useCache || $items === false) { // 先获得用户的所有角色 $roles = RbacUserRole::getUserRoles($userId, true); if (empty($roles)) { return $items; } //获取该用户所有角色的任务 $taskIds = RbacRoleTask::getTaskAuthorized($roles); $authItems = []; ////获取任务的所有权限 if (is_array($taskIds) && count($taskIds) > 0) { //获取任务的所有权限 $authItems = RbacTaskItems::getTaskAuthorized($taskIds); } foreach ($authItems as $v) { $items[$v] = $v; } Yii::$app->{$cacheComponents}->set($cachekey, $items, 1800); } return $items; }
public function actionUnAssignUser($user_id, $role_id) { if (preg_match('/^\\d+$/', $user_id) && preg_match('/^\\d+$/', $role_id)) { //删除用户角色的授权 if (models\RbacUserRole::deleteUserRoles($user_id, [$role_id])) { // 更新用户权限缓存 models\RbacAuthitems::getUserOperationAuthItems($user_id, false); } } else { throw new Exception('params is not safe!'); } return $this->redirect(['/rbac/role/related', 'id' => $role_id]); }
public function updateRelateUser($userIds, $roleId, $model) { if (is_array($userIds)) { $relatedUserList = $model->getUserIdsByRoleId($roleId); //获取已关联角色的用户ID和本次选择的用户ID取差集 即为添加的用户Id $userAddIds = array_diff($userIds, $relatedUserList); if (empty($userAddIds)) { return true; } $values = []; foreach ($userAddIds as $k => $item) { $temp = [$item, $roleId]; array_push($values, $temp); } $result = \Yii::$app->db->createCommand()->batchInsert(RbacUserRole::tableName(), ['user_id', 'role_id'], $values)->execute(); if ($result) { //更新缓存 foreach ($userAddIds as $userid) { RbacUserRole::getUserRoles($userid, false); } return true; } } return false; }