示例#1
0
 /**
  * 获取用户所有的操作、自定义的授权项,缓存半小时,用于防止缓存被集中请求
  * @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;
 }
示例#2
0
 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]);
 }
示例#3
0
 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;
 }