Yii2 需要所有控制器和操作才能登录

2022-08-31 00:14:51

在我的网站控制器中,我这样写

    'access' => [
        'class' => AccessControl::className(),
        'rules' => [
            [
                'actions' => ['login', 'error'],
                'allow' => true,
            ],
            [
                'actions' => ['logout', 'index' ,'call-back'], // add all actions to take guest to login page
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
    ],

所以如果我去索引或回调操作,我会重定向到登录页面。但是我必须为每个控制器的所有操作执行此操作。你能告诉我最好的方法吗?


答案 1

将此规则放在该部分的开头:rules

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

省略意味着所有操作。actions

所以你的配置是这样的:AccessControl

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'roles' => ['@'],
                ],

                // ...
            ],
        ],
    ];
}

请记住,规则的应用顺序是按声明顺序应用的。

若要在不进行继承的情况下全局执行此操作,请在应用程序配置中添加以下数组(不在内部!)声明:as beforeRequestcomponents

'components' => [ ... ],
'as beforeRequest' => [
    'class' => 'yii\filters\AccessControl',
    'rules' => [
        [
            'allow' => true,
            'actions' => ['login'],
        ],
        [
            'allow' => true,
            'roles' => ['@'],
        ],
    ],
    'denyCallback' => function () {
        return Yii::$app->response->redirect(['site/login']);
    },
],

此代码将在每个请求之前运行,并阻止除来宾之外的所有操作。login

确保 除 之外,其他控制器中没有操作。如果有(例如,它们用于不同的目的),请在相应的控制器中显式阻止它们。但这是非常罕见的情况。loginSiteController


答案 2

如果要向所有控制器操作添加访问控制。请在组件部分下的主配置文件中添加以下代码。

'as access' => [
        'class' => \yii\filters\AccessControl::className(),//AccessControl::className(),
        'rules' => [
            [
                'actions' => ['login', 'error'],
                'allow' => true,
            ],
            [
                'actions' => ['logout', 'index'], // add all actions to take guest to login page
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
    ],

推荐