2012-11-10 221 views
0

我想弄清楚如何让我的用户身份验证体系结构。而不是每个用户的正常帐户,我正在开发一个系统,您有一个帐户(电子邮件和密码),它链接到各种较小的帐户(具有不同的ID,显示名称,访问角色......基本上是另一个表在数据库中)。这些较小的或“子”账户完全相互独立。Yii - 创建与子帐户链接的“主”用户帐户

我目前正在使用它登录“主”帐户,并且在用户菜单中有一个下拉列表,用于在各个子帐户之间进行切换。但是,我坚持要如何实现切换帐户并保持其持久性。

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

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

回答

0

看起来像你描述的一样正确,但没有你的实际代码,我不知道你可能混淆了什么。以下是我只是验证工作对我来说:

在你的组件文件夹,请将名为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方法的包装可以按照需要工作。

+0

这基本上是我所做的,但它不会持续。假设我在用户个人资料中设置了ID,我还想访问主页或任何其他页面上的变量。如果我按照你所做的方式设置它,并通过echo'Yii :: app() - > user-> subId;调用它,它会返回'Undefined property:UWebUser :: $ subId'。我需要将其设置在每个不可能的页面上。 – Ryan

+0

找到了。 'Yii :: app() - > user-> setState('subID',##);'这会使它在页面中持续存在。感谢您的帮助=) – Ryan

+0

嗯,是的,这实际上是比我想要做的更好的解决方案。这会将它保存在会话中,同时应该足以满足您的需求。很高兴我能帮上忙。 –