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重定向, 返回首页