在学习Yii的RBAC权限管理代码中,针对前端请求API,采用了忽略的办法,所用的代码如下:
<?php
/**
* Created by PhpStorm.
* User: oaksp
* Date: 2018/2/3
* Time: 10:42
*/
namespace backend\components;
use Yii;
use \yii\base\ActionFilter;
use yii\web\ForbiddenHttpException;
class AccessControl extends ActionFilter
{
/**
* 对用户请求的路由进行验证
* @return true 表示有权访问
*/
public function beforeAction($action)
{
// 当前路由
$route = $action->getUniqueId();
// 忽略列表
$publicPages = [
'site/test',
'site/up',
'track/upload-gpx',
'site/login',
'site/signup',
'site/reset-password',
'site/error',
'wx/*',
];
$route_arr = explode('/', $route); // 拆分路径为数组
foreach($publicPages as $publicPage) {
$publicPageArr = explode('/', $publicPage); // 拆分路径为数组
for ($i = 0; $i < count($publicPageArr); $i++) {
if (($publicPageArr[$i] == $route_arr[$i]) || ($publicPageArr[$i] == '*')) {
$flag = true; // 在列表中
}
else {
$flag = false; // 在列表中
break; // 不在列表中,跳出本次循环
}
}
if ($flag) {
break; // 在列表中,跳出循环,break 2;跳出二层循环
}
}
// 如果未登录且不在列表中,则直接返回
if (Yii::$app->user->isGuest && !$flag) {
Yii::$app->user->loginRequired();
}
else {
return true;
}
}
该版本代码安全性差,仅供参考
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。