共计 944 个字符,预计需要花费 3 分钟才能阅读完成。
在学习 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;}
}
该版本代码安全性差,仅供参考
正文完