Yii:如何使用两个不同的表进行身份验证

时间:2011-12-18 21:00:31

标签: authentication login module yii

有谁知道如何单独登录表单并在两个不同的表上进行身份验证? 我不能用一张桌子和不同的角色...客户要求做单独的表...

我有基于Yii框架登录系统的用户登录系统。但是现在我必须为管理员用户(管理模块)单独做。

2 个答案:

答案 0 :(得分:2)

我解决这个问题的方法是从Yii Framework库创建这个插件的两个相同副本:

http://www.yiiframework.com/extension/yii-user/

然后我重构它并将其称为“Customer”并更改了配置,以便它使用不同的表等。

在Yii的配置选项中,我还包括这些选项以保持会话分开(config / main.php):

'components' => array(
    ...
    'user' => array(
        // enable cookie-based authentication
        'allowAutoLogin' => true,
        'loginUrl' => array('/user/login'),
        'class' => 'RWebUser', // added - possibly uses the Rights user manager
    ),
    'customer' => array(
        // enable cookie-based authentication
        'allowAutoLogin' => true,
        'loginUrl' => array('/customer/login'),
        'stateKeyPrefix' => 'customer',
    ),
    'customerUser' => array(
        'class' => 'CWebUser',
        'stateKeyPrefix' => 'customer',
        'loginUrl' => array('/customer/login'),
    ),

答案 1 :(得分:1)

您可以向UserIdentity组件添加一个属性,例如,role。然后更改UserIdentity的authenticate()方法,以便从与角色对应的帐户表中提取。现在,您需要确保在调用UserIdentity->role之前设置了UserIdentity->authenticate()。如果您正在关注yiic webapp模板,那么这将在SiteController中。两种非常简单的方法(其中包括):

  1. 有两个不同的登录页面,一个用于普通用户,一个用于管理员,每个都有自己的URL。在SiteController中使用两个视图和两个登录操作方法实现它,每个方法在调用UserIdentity->role之前适当地设置UserIdentity->authenticate()。这种方法重复了代码,一旦它工作,你就能看到如何对它进行排序。
  2. 使用一个登录页面,其中包含管理员用户选择的表单元素(可能是复选框)。根据表单状态,此表单的操作方法UserIdentity->role