RBAC中的权限管理代码第一版

36次阅读

共计 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;}
    }

该版本代码安全性差,仅供参考

正文完
 0