在YII2中无法访问时设置Forbidden(#403)的默认页面

时间:2017-01-29 06:52:20

标签: yii yii2 yii2-advanced-app yii2-basic-app

这是我在ShippingController中的行为函数:

 public function behaviors()
        {
        return [
            'access' => [
                'class' => \yii\filters\AccessControl::className(),
                'rules' => [
                    // deny all POST requests
//                        [
//                        'actions' => ['index', 'create'],
//                        'allow' => TRUE,
//                    ],
                        [
                        'actions' => ['index', 'create', 'init'],
                        'allow' => true,
                        'roles' => ['user2','user3'],
                        'denyCallback' => function()
                            {

                     redirect to address/index if user 2 cant access redirect to address/create if user3 cant access
                            //redirect here
                            }
                    ],
                // everything else is denied
                ],
            ],
        ];

        }

如何处理这个问题! 如果角色:address/index无法访问,我希望重定向页面为user2 如果角色:address/create无法访问

,则重定向到user3

1 个答案:

答案 0 :(得分:2)

我假设你在yii中使用RBAC系统。 检查以下配置文件:

'authManager'  => [
            'class'        => 'yii\rbac\DbManager',
],

或' yii \ rbac \ PhpManager'。

这对我有用:

'actions' => ['index', 'create', 'init'],
'allow' => false,
'roles' => ['user2','user3'],
'denyCallback' => function()
     {
        $user = Yii::$app->user;
        if ($user->can('user2')) {
           return Yii::$app->getResponse()->redirect(['/address/index']);
        } else {
           return Yii::$app->getResponse()->redirect(['/address/create']);
        }
     }

'允许'应该将规则的选项设置为false,以便调用denyCallback。 您可以在" yiisoft / yii2 / filters / AccessControl.php"第120行。