/** * 角色分配任务 * 根据任务分类来过滤和显示数据 * * @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]); }
/** * 获取用户所有的操作、自定义的授权项,缓存半小时,用于防止缓存被集中请求 * @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; }