| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- namespace backend\controllers;
- use backend\models\AdminRole;
- use common\enums\AppEnum;
- use common\enums\StatusEnum;
- use common\helpers\Auth;
- use common\models\rbac\AuthItem;
- use common\models\rbac\AuthItemChild;
- use common\traits\BaseControllerTrait;
- use yii\web\Controller;
- use yii\filters\VerbFilter;
- use yii\filters\AccessControl;
- use common\traits\ErrorTrait;
- use Yii;
- use yii\web\ForbiddenHttpException;
- /**
- * Site controller
- */
- class BaseController extends Controller
- {
- public $enableCsrfValidation = false;
- public $pageSize = 20;
- use ErrorTrait;
- use BaseControllerTrait;
- /**
- * {@inheritdoc}
- */
- public function behaviors()
- {
- $url = Yii::$app->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;
- }
- }
|