Example #1
0
 /**
  * 角色分配任务
  * 根据任务分类来过滤和显示数据
  *
  * @author lixupeng
  */
 public function actionAssignTask($id)
 {
     $model = self::findModel($id);
     // 先获取授权分类
     $task_categorys = models\RbacTaskCategory::getCategories();
     $searchParams = Yii::$app->request->queryParams;
     $task_category = isset($searchParams['task_category']) ? $searchParams['task_category'] : null;
     //任务列表
     $unassign = $taskItems = models\RbacAuthtask::getTasksByCategory($task_category);
     // 已授权的
     $authorized = models\RbacRoleTask::getTaskAuthorized($id);
     // 从所有授权任务中过滤出已经授权的
     if ($authorized) {
         foreach ($authorized as $k => $v) {
             unset($unassign[$v]);
         }
     }
     $authorized = array_intersect_key($taskItems, array_flip($authorized));
     return $this->render('/rbac/role/assignTask', ['model' => $model, 'unassign' => $unassign, 'assigned' => $authorized, 'task_categorys' => $task_categorys, 'task_category' => $task_category]);
 }
Example #2
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;
 }