在yii2中使用访问控制

时间:2016-07-23 13:22:45

标签: yii2

我正在使用访问控制来仅允许访问经过身份验证的用户。

public function behaviors()
        {
            return [
                'access' => [
                'class' => AccessControl::className(),
                'only' => ['display'],
                'rules' => [
                    // allow authenticated users
                    [
                        'allow' => true,
                        'roles' => ['@'],
                        'matchCallback' => function ($rule, $action) {

                         return $this->redirect(Yii::$app->request->baseUrl.'/site/login');      
                        }],

                    ],
                ],
            ];
        }

        public function actionDisplay()
        {
                echo "display";
        } 

当我尝试在不登录时访问显示操作时,我被重定向到登录页面。但是当我尝试访问显示操作时,即使已登录,它也会重定向到索引页面。我做错了什么?

2 个答案:

答案 0 :(得分:1)

添加'actions' => [ 'display'],

如下所示

'rules' => [
                // allow authenticated users
                [
                    'actions' => [ 'display'],
                    'allow' => true,
                    'roles' => ['@'],
                    'matchCallback' => function ($rule, $action) {

                     return $this->redirect(Yii::$app->request->baseUrl.'/site/login');      
                    }],

                ],

通常它对我有用

答案 1 :(得分:1)

代码没有问题。只是&匹配回调'调用已通过身份验证的用户并重定向到登录,如果登录则最终重定向到索引。 删除' matchCallback'解决了它。

'rules' => [
             [
              'allow' => true,
              'roles' => ['@'],
              ],
           ],