在學習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; } }
該版本代碼安全性差,僅供參考