• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
车车大人
博客园    首页    新随笔    联系   管理     

Yii框架RBAC功能

 数据表结构

 

用户表adminuser

权限表 auth_item

 

 

用户角色表auth_assignment

 

角色权限表auth_item_child

 

 这段代码直接控制的是游客或者认证用户

public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],

            //这里是设定的权限---start
            'access'=>[
                'class' => AccessControl::className(),
                //这里一定要注意rules的一个[]里面是包了两个[],如果写错了会报错
                'rules' =>
                    [
//                        [
//                            'actions' => ['index','view'],//动作
//                            'allow' => true,
//                            'roles' => ['?'],//  这里的问号代表的是没有经过认证的游客用户
//                        ],

                        [
                            'actions' => ['view','index','create','update'],//动作
                            'allow' => true,
                            'roles' => ['@'],//这里的符号指的是经过认证的正式用户
                        ],

                    ],

            ],


            //好了,设定权限结束了---end

        ];
    }

 

 

这段代码控制用户有没有这个权限

 public function actionIndex()
    {
        if(!Yii::$app->user->can('commentAuditor')){
            throw new ForbiddenHttpException('对不起,您没有操作权限!');//这句话的意思是如果没有这个权限就抛出异常提示(注意要引用相关的ForbiddenHttpException类)
        }

        $searchModel = new CommentSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

 

 

***************************************************************************************************************************************************************************

为了让最高管理才能操作管理员的选项我在登录的时候加了这个

public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new AdminLoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {

            //自己加的为了权限判断   start
            $AuthAssignments = AuthAssignment::find()->select(['item_name'])->where(['user_id'=>Yii::$app->user->id])->orderBy('item_name')->all();
            $AuthAssignmentsArray = array();
            foreach ($AuthAssignments as $AuthAssignment){
                array_push($AuthAssignmentsArray,$AuthAssignment->item_name);
            }
            if(in_array('admin',$AuthAssignmentsArray)){
                Yii::$app->session['user_role']='666';//最高管理
            }else{
                Yii::$app->session['user_role']='999';//最高管理之外的
            }

            //end   这一段就是为了控制最高管理员有分配角色权限,其他人登录以后没有



            return $this->goBack();
        } else {
            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }

 然后可以控制它

public function behaviors()
    {
        if(Yii::$app->session['user_role']=='666'){
            return [
                'verbs' => [
                    'class' => VerbFilter::className(),
                    'actions' => [
                        'delete' => ['POST'],
                    ],
                ],

                //这里是设定的权限---start
                'access'=>[
                    'class' => AccessControl::className(),
                    //这里一定要注意rules的一个[]里面是包了两个[],如果写错了会报错
                    'rules' =>
                        [
//                        [
//                            'actions' => ['index','view'],//动作
//                            'allow' => true,
//                            'roles' => ['?'],//  这里的问号代表的是没有经过认证的游客用户
//                        ],

                            [
                                'actions' => ['view','index','create','update','resetpwd','privilege'],//动作
                                'allow' => true,
                                'roles' => ['@'],//这里的符号指的是经过认证的正式用户
                            ],

                        ],

                ],


                //好了,设定权限结束了---end


            ];
        }else{
            return [
                'verbs' => [
                    'class' => VerbFilter::className(),
                    'actions' => [
                        'delete' => ['POST'],
                    ],
                ],

                //这里是设定的权限---start
                'access'=>[
                    'class' => AccessControl::className(),
                    //这里一定要注意rules的一个[]里面是包了两个[],如果写错了会报错
                    'rules' =>
                        [
//                        [
//                            'actions' => ['index','view'],//动作
//                            'allow' => true,
//                            'roles' => ['?'],//  这里的问号代表的是没有经过认证的游客用户
//                        ],

                            [
                                'actions' => ['view','index','create','update'],//动作
                                'allow' => true,
                                'roles' => ['@'],//这里的符号指的是经过认证的正式用户
                            ],

                        ],

                ],


                //好了,设定权限结束了---end


            ];
        }

    }

其实也不用这么麻烦,直接在index展示那里判断,不是最高权限就不让显示页面就可以

public function actionIndex()
    {
        if(!Yii::$app->user->can('admin')){
            throw new ForbiddenHttpException('对不起,您没有操作权限!');//这句话的意思是如果没有这个权限就抛出异常提示(注意要引用相关的类)
        }

        $searchModel = new AdminuserSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

*************************************************************************************************************************************************************************************

 

 

其实也没什么  就是建表把逻辑搞清楚了就完事了!

通往牛逼的路上,在意的只有远方!
posted @ 2017-04-14 16:22  车车大人  阅读(365)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3