我在web.php文件中有以下配置,强制用户在使用该应用程序之前先登录。
'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' => ['@'],
],
],
],
但我在Forbidden (#403)
http://localhost/yii2/debug/default/toolbar?tag=58759099581f2
错误
如何在规则中允许?
答案 0 :(得分:1)
首先,此配置不正确。这部分:
[
'actions' => ['logout', 'index'], // add all actions to take guest to login page
'allow' => true,
'roles' => ['@'],
],
还将仅对经过身份验证的用户执行logout
和index
次操作。需要将其更改为:
[
'allow' => true,
'roles' => ['@'],
],
允许访问整个网站。然后,您可以在AccessControl
或特定控制器的操作中进一步自定义访问权限。因此,在您的情况下,调试不是唯一的禁止页面。
我认为这是从this answer复制粘贴到SO上的相关问题。
顺便说一下,在基本应用程序的应用程序配置中已经启用了调试:
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
// uncomment the following to add your IP if you are not connecting from localhost.
//'allowedIPs' => ['127.0.0.1', '::1'],
];
// Below Gii is enabled too, code is omitted for brevity
}
因此,当用户通过身份验证时,您可以毫无问题地访问调试模块。
注意:对于此配置,每个控制器的
login
和error
操作都允许未经过身份验证的用户。小心一点。其他控制器中可能存在具有相似名称的操作。
更新:实际上您可以通过$matchCallback进一步提高此解决方案的灵活性:
'as access' => [
'class' => \yii\filters\AccessControl::className(),
'rules' => [
[
'matchCallback' => function ($rule, $action) {
$allowedControllers = [
'debug/default',
];
$allowedActions = [
'site/login',
'site/error',
];
$isAllowedController = in_array($action->controller->uniqueId, $allowedControllers);
$isAllowedAction = in_array($action->uniqueId, $allowedActions);
return $isAllowedController || $isAllowedAction;
},
'allow' => true,
],
[
'allow' => true,
'roles' => ['@'],
],
],
],
$allowedControllers
列表中(如果模块位于模块内,则在模板名称前面加上)以完全允许它们(允许所有操作)。$allowedActions
列表中(前缀为控制器名称,如果属于模块,则为模块名称)。通过这种方式,您可以在每个页面(包括login
和error
)上对本地服务器上的调试模块具有完全访问权限。
此外,这可以防止来自不同模块/控制器的动作名称重合。
答案 1 :(得分:0)
您必须启用工具栏操作web.php配置文件:
'rules' => [
[
'actions' => ['login', 'error', 'toolbar'],
'allow' => true,
],