【发布时间】:2011-12-19 22:01:39
【问题描述】:
有谁知道如何做单独的登录表单并在两个不同的表上进行身份验证? 我不能使用一张桌子和不同的角色...客户要求做单独的表格...
我有基于 Yii 框架登录系统的用户登录系统。但是现在我必须为管理员用户(管理模块)做单独的事情。
【问题讨论】:
标签: authentication login module yii
有谁知道如何做单独的登录表单并在两个不同的表上进行身份验证? 我不能使用一张桌子和不同的角色...客户要求做单独的表格...
我有基于 Yii 框架登录系统的用户登录系统。但是现在我必须为管理员用户(管理模块)做单独的事情。
【问题讨论】:
标签: authentication login module yii
我解决这个问题的方法是从 Yii 框架库中创建这个插件的两个完全相同的副本:
http://www.yiiframework.com/extension/yii-user/
然后我对其进行了重构并将其命名为“客户”并更改了配置,以便它使用不同的表等。
在 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'),
),
【讨论】:
您可以向UserIdentity 组件添加一个属性,例如角色。然后更改 UserIdentity 的authenticate() 方法,使其从角色对应的帐户表中获取。现在您需要确保在调用UserIdentity->authenticate() 之前设置了UserIdentity->role。如果您遵循yiic webapp 模板,那么这将在SiteController 中。两种非常简单的方法(除其他外):
SiteController 中使用两个视图和两个登录操作方法来实现它,每个都在调用UserIdentity->authenticate() 之前适当地设置UserIdentity->role。这种方法复制了代码,一旦它工作,您将能够看到如何对其进行排序。UserIdentity->role 根据表单状态。【讨论】: