Yii2 高级:如何在后端为登录用户设置过滤器?

Posted

技术标签:

【中文标题】Yii2 高级:如何在后端为登录用户设置过滤器?【英文标题】:Yii2 advanced : how to set filter for login user in backend? 【发布时间】:2018-02-10 07:41:10 【问题描述】:

现在所有用户都可以在前端和后端登录

如何设置后台登录的限制和过滤?!

这是我在后台的main-local.php

    'modules' => [
    'user' => [
        'class' => 'dektrium\user\Module',
        'enableUnconfirmedLogin' => true,
        'confirmWithin' => 21600,
        'cost' => 12,
        'controllerMap' => [
            'admin' => 'backend\controllers\user\AdminController',
            'profile' => 'backend\controllers\user\ProfileController',
            'recovery' => 'backend\controllers\user\RecoveryController',
            'registration' => 'backend\controllers\user\RegistrationController',
            'security' => 'backend\controllers\user\SecurityController',
            'settings' => 'backend\controllers\user\SettingsController',
        ],
        'admins' => ['admin']
    ],

]

我希望只有管理员能够进入后端

【问题讨论】:

如果您使用带有 RBAC 的高级模板,您无需执行任何操作,普通用户将无法登录到后端。因为backendfrontend 会话cookie 是分开的。 【参考方案1】:

您可以使用 rbac 并设置一个管理员角色,然后在控制器中:

public function behaviors()
    
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        //if actions not set, it applies to all actions.
                        //'actions' => ['index'],
                        'allow' => true,
                        //the 'admin' is your RBAC auth item.
                        'roles' => ['admin'],
                    ],
                ],
            ],
        ];
    

有关 RBAC 的更多信息,请参阅RBAC doc。

您也可以通过添加IP地址来设置您的控制器过滤器

     //'192.168.*' matches all IP addresses in the segment '192.168.'. If this option is empty or not set, it means this rule applies to all IP addresses.
    'ips'=> ['192.168.*'],

最后,如果您想设置全局访问控制过滤器,只需检查链接 To do it globally without inheritance.

【讨论】:

这不会禁止登录,而是在您访问该特定控制器时提供403

以上是关于Yii2 高级:如何在后端为登录用户设置过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 在后端从前端显示图像 - 设置别名

从Yii2高级模板Gridview获取值过滤

Yii2:是不是可以从登录 Yii 调试器中过滤掉一些查询?

Yii2,如何将登录用户的用户名自动保存在另一个表中?

yii2_behaviors() _AccessControl过滤器详解

Yii2前端和后端之间的链接(高级模板)