getRequest()->getAbsoluteUrl(); $url_pre = Yii::$app->services->setting->platform->get('system.backend_url').'/index.php?r=admin'; if(strpos($url,$url_pre)!==false)\Yii::$app->user->loginUrl = ['admin/auth/login','login_type'=>Yii::$app->params['login_type']]; return [ 'access' => [ 'class' => AccessControl::class, 'rules' => [ [ 'allow' => true, 'roles' => ['@'], ], ], ], ]; } public function beforeAction($action) { if (!parent::beforeAction($action)) { return false; } // 每页数量 $this->pageSize = Yii::$app->request->get('limit', 20); $this->pageSize > 50 && $this->pageSize = 50; // 判断当前模块的是否为主模块, 模块+控制器+方法 $permissionName = Yii::$app->controller->route; // 判断是否忽略校验 if (in_array($permissionName, Yii::$app->params['noAuthRoute'])) { return true; } // 开始权限校验 add 添加overview验证 //if($permissionName !='mall/overview/index'){ if (!Auth::verify($permissionName)) { if($this->request->isAjax){ return $this->error('对不起,您现在还没获此操作的权限'); }else{ $user_identity = Yii::$app->user->identity; if(empty($user_identity)) return $this->redirect(['/admin/auth/login','login_type'=>base64_encode('mall')]); if(!empty($user_identity->mall_id)){ $route = $this->getAdminCanRoute($user_identity); $redirect_url = \Yii::$app->urlManager->createAbsoluteUrl($route??''); return $this->redirect($redirect_url); } throw new ForbiddenHttpException('对不起,您现在还没获此操作的权限'); } } //} return true; } /** * 获取当前管理员可访问的1级路由 * @param $user_identity * @return mixed|string */ protected function getAdminCanRoute($user_identity){ $role = AdminRole::findOne(['admin_id'=>$user_identity['id']]); $role_id = $role['role_id']; $auth_item_list = AuthItem::lists([ 'where'=>[ ['status'=>StatusEnum::ENABLED], ['pid'=>0], ['is_addon'=>0], ['cate_id'=>AppEnum::MALL], ], 'select'=>'id,name', 'index'=>'id' ]); $item_ids = array_column($auth_item_list,'id'); $auth_item_child_one = AuthItemChild::getOne([ ['item_id'=>$item_ids], ['role_id'=>$role_id]],true,[],'item_id asc','item_id' ); $route = ''; if(!empty($auth_item_child_one['item_id'])){ $route = $auth_item_list[$auth_item_child_one['item_id']]['name']??''; // 兼容例如 mall/diy的url if ($route && count(explode('/', $route)) < 3) { $auths = Auth::getAuth(); $auth_item_list = AuthItem::lists([ 'where'=>[ ['status' => StatusEnum::ENABLED], ['pid' => $auth_item_child_one['item_id']], ['is_addon' => 0], ['cate_id' => AppEnum::MALL], ], 'select'=>'name', ]); $auth_item_list = array_column($auth_item_list, 'name'); $intersect = array_values(array_intersect($auths, $auth_item_list)); $intersect && $route = $intersect[0]; } } return $route; } }