0

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

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

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

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

4

1 回答 1

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 中的逻辑以对 sub 的displayName属性执行相同的操作。然后让你的脚本在适当的地方设置这些值,你就准备好了。

更新:为以后的观众修复了我的代码。上述内容现在应该有效并持续存在。以前我曾尝试在 WebUser 对象中定义一个变量,但显然不能持久。相反,使用 WebUser 对象作为 setState/getState 方法的包装可以按需要工作。

于 2012-11-10T09:11:08.680 回答