Yii2:将访问控制过滤器设置为禁止后重定向



我有一个控制器,使用AccessControl在行为函数如下:

public function behaviors()
    {       
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['login', 'error'],
                        'allow' => true,
                    ],
                    [
                        'actions' => ['logout', 'index'],
                        'allow' => true,
                        'roles' => ['@'],
                        'matchCallback' => function(){
                            return (Yii::$app->user->identity->ROLE_ID=='1');
                        }
                    ],
                ],
            ],
        ];
    }

在我的应用程序中有2个角色,adminuser, role_id 1是admin, role_id 2是staff,两者都可以访问/app/administrator,所以我用它过滤。当我和员工一起登录时,显示的是禁止页面。

当登录的用户不是admin时,我想重定向回到登录页面。也许我必须在AccessControl选项中添加脚本。那么,我能做什么呢?由于

您需要指定denyCallback来实现这一点。

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
               //your access rules
            ],
            'denyCallback' => function($rule, $action) {
                 //redirection here
            }
        ],
    ];
}

请注意,每次访问被拒绝时都会调用这个denyCallback。如果你想要特定于规则的denyCallback,例如你想要不同的应用程序行为,那么你需要像这样指定它:

'rules' => [
    //other rules
    [
        'actions' => ['index'],
        'allow' => false,
        'roles' => ['@'],
        'matchCallback' => function(){
            return (Yii::$app->user->identity->ROLE_ID == 2);
        },
        'denyCallback' => function(){
            //redirect here
        }
    ],
],

在这里,我们明确禁止访问index action的用户使用ROLE_ID == 2和重定向他们。

最新更新