在一个应用程序中定义两个不同的登录过

ham*_*dkh 0 php identity login yii

我的yii应用程序中的登录过程有问题.我有两种不同类型的用户,包括管理网站和客户的管理员用户.我正在使用CwebUserUserIdentitiy管理这两个组的登录.但我的问题是,当客户登录网站时,他也可以访问管理页面.我想要做的是说应用程序为它们创建两个不同的身份会话.我不想使用访问控制规则之类的东西.有没有办法在Yii风格中为它们创建不同的会话?

Mic*_*rtl 8

如果您不想使用其中一个注释中建议的复杂RBAC设置,则可以在配置2个不同的用户组件时实现此目的stateKeyPrefix:

'user' => array(              // Webuser for the frontend
    'class'             => 'CWebUser',
    'loginUrl'          => array('site/login'),
    'stateKeyPrefix'    => 'frontend_',
),
'adminUser' => array(         // Webuser for the admin area (admin)
    'class'             => 'CWebUser',
    'loginUrl'          => array('/admin/site/login'),
    'stateKeyPrefix'    => 'admin_',
),
Run Code Online (Sandbox Code Playgroud)

所以现在你有2个独立的用户组件:useradminUser.您必须创建另一个AdminLoginFormAdminUserIdentity使用它/admin/site/login来进行身份验证.这应该是直截了当的.

虽然您仍然遇到问题,但您无法accessRules在管理模块中轻松定义,因为它会使用该user组件执行授权检查,而您希望它使用该adminUser组件.要解决此问题,您可以在以下方式中更改组件配置AdminModule:

class AdminModule extends CWebModule
{
    public function beforeControllerAction($controller, $action)
    {
        if(parent::beforeControllerAction($controller,$action))
        {
            // Make 'adminUser' the main user in this module.
            // Frontend user is available as 'Yii::app()->frontendUser'.
            Yii::app()->setComponent('frontendUser', Yii::app()->user);
            Yii::app()->setComponent('user', Yii::app()->adminUser);
            return true;
        }
        else
            return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用不同的用户群进行身份验证,登录到站点的2个不同部分.