Yii - 创建与子帐户链接的“主”用户帐户

时间:2012-11-10 05:39:17

标签: php frameworks yii

我试图找出如何制作用户身份验证架构。而不是每个用户正常的一个帐户,我正在开发一个系统,你有一个帐户(电子邮件和密码),它链接到各种较小的帐户(具有不同的ID,显示名称,访问角色......基本上是另一个表在数据库中)。这些较小的或“子”帐户完全相互独立。

我目前正在努力登录“Master”帐户,我在用户菜单中有一个下拉列表,用于在各个子帐户之间切换。但是,我一直坚持如何实现切换帐户并保持持久性。

我已尝试扩展CWebUser并添加setSub($id)方法,该方法将子帐户的ID切换为,并将$currentSub变量设置为子帐户模型,但似乎不工作...我不知道从哪里开始。

我真正需要的是要保留的子帐户的displayNameid,以及在网站的任何页面上更改这些值的方法。然后我可以在个性化页面上使用ID并从那里开始(而不是使用“主”帐户的ID,其设置为Yii::app()->user->id)。我想我只是不知道如何设置变量并让它们持续存在。

1 个答案:

答案 0 :(得分:0)

看起来你正在按照你的描述做正确的事,但如果没有你的实际代码,我不知道你可能会混淆什么。以下是我刚刚验证过的内容:

在components文件夹中,使用以下代码放置名为WebUser.php的新文件:

class WebUser extends CWebUser{

    public function getSubId(){
        return Yii::app()->user->getState('subId');
    }

    public function setSubId($id){
        Yii::app()->user->setState('subId',$id);
    }
}

然后在config / main.php文件中将'class'=>'WebUser'行添加到您的用户组件。

// application components
'components'=>array(
    'user'=>array(
        // enable cookie-based authentication
        'class'=>'WebUser',
        'allowAutoLogin'=>true,
    ),
...

通过上述内容,我使用以下代码验证了它的工作原理:

Yii::app()->user->subId = 10;
echo Yii::app()->user->subId;

它确实在屏幕上回显了10。您可以在WebUser中复制逻辑,以对子displayName属性执行相同操作。然后让你的脚本在适当的地方设置这些值,然后你就可以了。

更新:为以后的观看者修复了我的代码。以上应该现在可以工作和持续。以前我曾尝试在WebUser对象中定义一个变量,但显然这种变量无法持久化。相反,使用WebUser对象作为setState / getState方法的包装器可以正常工作。