Php Yii-创建一个;大师;与子帐户链接的用户帐户

Php Yii-创建一个;大师;与子帐户链接的用户帐户,php,frameworks,yii,Php,Frameworks,Yii,我正试图弄清楚我将如何制定我的用户身份验证体系结构。我正在开发一个系统,在这个系统中,每个用户有一个帐户(电子邮件和密码),它链接到各种较小的帐户(具有不同的ID、显示名称、访问角色……基本上是数据库中的另一个表)。这些较小的或“子”账户彼此完全独立 我现在可以登录到“主”帐户,并且在用户菜单中有一个下拉列表,用于在各个子帐户之间切换。然而,我被困在如何实现转换帐户和保持它的持久性上 我尝试扩展CWebUser并添加一个setSub($id)方法,该方法将子帐户的id转换为,并将$current

我正试图弄清楚我将如何制定我的用户身份验证体系结构。我正在开发一个系统,在这个系统中,每个用户有一个帐户(电子邮件和密码),它链接到各种较小的帐户(具有不同的ID、显示名称、访问角色……基本上是数据库中的另一个表)。这些较小的或“子”账户彼此完全独立

我现在可以登录到“主”帐户,并且在用户菜单中有一个下拉列表,用于在各个子帐户之间切换。然而,我被困在如何实现转换帐户和保持它的持久性上

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


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

看起来您所描述的一切都是正确的,但如果没有实际的代码,我不知道您可能混淆了什么。以下是我刚刚验证的对我有效的方法:

在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);
    }
}
Yii::app()->user->subId = 10;
echo Yii::app()->user->subId;
然后在config/main.php文件中,将
'class'=>'WebUser'
行添加到用户组件中

// application components
'components'=>array(
    'user'=>array(
        // enable cookie-based authentication
        'class'=>'WebUser',
        'allowAutoLogin'=>true,
    ),
...
通过以上内容,我用以下代码验证了它是否适用于我:

class WebUser extends CWebUser{

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

    public function setSubId($id){
        Yii::app()->user->setState('subId',$id);
    }
}
Yii::app()->user->subId = 10;
echo Yii::app()->user->subId;
它确实在屏幕上回响了10次。您可以在WebUser中复制逻辑,以对sub的
displayName
属性执行相同的操作。然后,只要让脚本在适当的地方设置这些值,就可以了


更新:修复了我的代码,供以后查看。上述情况现在应该有效并持续下去。之前,我曾尝试在WebUser对象中定义一个变量,但显然这无法持久。相反,使用WebUser对象作为setState/getState方法的包装器可以根据需要工作。

我基本上就是这么做的,但它不会持久。假设我在用户配置文件中设置了ID,我还希望访问主页或任何其他页面上的变量。如果我像您那样设置它,并通过echo
Yii::app()->user->subId调用它
它返回
未定义的属性:UWebUser::$subId
。我需要在不可能的每一页上设置它。找到了<代码>Yii::app()->user->setState('subID',###)将使其在页面间持久化。谢谢你的帮助=)嗯,是的,这实际上是一个比我想做的更好的解决方案。这将在会话中保存它,同时应足以满足您的需要。很高兴我能帮忙。