在后台main.php中配置行为报错,在控制器不会出现错误 [ 2.0 版本 ]
min.php配置行为
main.php
'as myBehavior' => [
    'class' => 'backend\components\MyBehavior',
    'allowActions' => [
        'site/error','site/login',
    ]
],
backend\components\MyBehavior.php
namespace backend\components;
use Yii;
use yii\base\ActionFilter;
class MyBehavior extends ActionFilter
{
    public $allowActions = [];
    public function beforeAction($action)
    {
        $currentRequestRoute = $action->getUniqueId();
        var_dump(Yii::$app->user->can('/' . $currentRequestRoute));
        var_dump('/' . $currentRequestRoute);
        if (!Yii::$app->user->can('/' . $currentRequestRoute)) {
            throw new \yii\web\ForbiddenHttpException('没有权限,请与管理员联系ss');
        }
        return true;
    }
}
错误页面
bool(false) string(11) "/site/error"
An Error occurred while handling another error:
yii\web\ForbiddenHttpException: 没有权限,请与管理员联系ss in E:\gitClone\yii-adv-rbac\backend\components\MyBehavior.php:22
Stack trace:
#0 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\ActionFilter.php(75): backend\components\MyBehavior->beforeAction(Object(yii\web\ErrorAction))
#1 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent))
#2 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Component.php(557): call_user_func(Array, Object(yii\base\ActionEvent))
#3 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Module.php(682): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent))
#4 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Controller.php(145): yii\base\Module->beforeAction(Object(yii\web\ErrorAction))
#5 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('error', Array)
#6 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\web\ErrorHandler.php(97): yii\base\Module->runAction('site/error')
#7 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\ForbiddenHttpException))
#8 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\ForbiddenHttpException))
#9 {main}
Previous exception:
yii\web\ForbiddenHttpException: 没有权限,请与管理员联系ss in E:\gitClone\yii-adv-rbac\backend\components\MyBehavior.php:22
Stack trace:
#0 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\ActionFilter.php(75): backend\components\MyBehavior->beforeAction(Object(yii\base\InlineAction))
#1 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent))
#2 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Component.php(557): call_user_func(Array, Object(yii\base\ActionEvent))
#3 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Module.php(682): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent))
#4 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Controller.php(145): yii\base\Module->beforeAction(Object(yii\base\InlineAction))
#5 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('create', Array)
#6 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('blog/create', Array)
#7 E:\gitClone\yii-adv-rbac\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#8 E:\gitClone\yii-adv-rbac\backend\web\index.php(17): yii\base\Application->run()
#9 {main}
控制器中配置行为(出现正确的权限提示页面)
 public function behaviors()
{
    return [
        //附加行为
        'myBehavior' => \backend\components\MyBehavior::className(),
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['POST','GET'],
            ],
        ],
    ];
}
正确提示页面

                wayneluo 补充于 2018-04-24 10:33
                
                                    
            
            在配置文件里是全局的行为,当第一次访问blog/ndex页面没有权限,抛出错误然后访问site/error,,site/error又走一遍行为,但是没有去过滤site/error所以报错了
共 0 个回答
没有找到数据。
wayneluo
            注册时间:2017-11-22
最后登录:2018-04-24
在线时长:10小时44分
    最后登录:2018-04-24
在线时长:10小时44分
- 粉丝0
- 金钱15
- 威望0
- 积分115
