RBAC中的權限管理代碼初版

在學習Yii的RBAC權限管理代碼中,針對前端請求API,採用了忽略的辦法,所用的代碼以下:php

<?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;
        }
    }
該版本代碼安全性差,僅供參考
相關文章
相關標籤/搜索