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重定向, 返回首页
请支持原创!转载时,请注明来源;
链接地址:https://www.cnblogs.com/cleverstone