Yii2 基于rbac访问控制

Yii2 是一款非常强大的PHP底层框架, 牛b的人都喜欢用它, 有时候你们可能会发现, Yii2 底层处理不是很好, 比如: 每次分页, yii底层都会多统计一次数据的总条数!  那只能说你对它还不够了解!

最近在做控制器的访问控制, 发现了yii自带的基于rbac的一套底层架构, 代码如下:

 1 public function behaviors()
 2 {
 3     return [
 4         'access' => [
 5             //yii\filter\AccessControl
 6             'class' => AccessControl::className(),
 7             'only' => ['*'],
 8             'rules' => [
 9                 [
10                      //允许
11                     'allow' => true, 
12                     //控制器下所有方法 
13                     'actions' => ['*'],
14                     //登录的情况下  "?"(游客)
15                     'roles' => '@',
16                 ],
17             ],
18              //不符合rules后的回调, 此方法 重写 yii\filter\AccessControl 中的方法denyAccess
19             'denyCallback' => function($rule, $action){
20                 //action 对象  $action->id 获取当前web应用下访问接口中的方法
21                 if($action->id == 'province' || $action->id == 'area'){
22 
23                     return;    //回调中断, 程序继续往下执行
24                 }
25                 //获取user对象
26                 $user = Yii::$app->getUser();
27                 //$user->getIsGuest() 此方法会重新刷新session, 判断当前浏览用户是否是游客身份
28                 if ($user !== false && $user->getIsGuest()) {
29                     //302重定向, 返回首页
30                     $this->redirect('/site/index');
31                 }
32 
33             }
34         ],
35     ];
36 }

 

 当用户登录之后, 可以访问此控制器下的所有接口, 

而不登陆的情况下只能访问province 和 area 两个方法, 其他接口访问时则会302重定向, 返回首页
posted @ 2018-06-08 12:58  clevstn  阅读(371)  评论(0编辑  收藏  举报