【问题标题】:Yii - Creating a "Master" user account linked with sub accountsYii - 创建一个与子账户链接的“主”用户账户
【发布时间】:2012-10-30 10:52:38
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php frameworks yii


    【解决方案1】:

    看起来您所做的一切都与您描述的一样,但如果没有您的实际代码,我不知道您可能混淆了什么。这是我刚刚验证的对我有用的内容:

    在您的组件文件夹中,使用以下代码放置一个名为 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 方法的包装可以按需要工作。

    【讨论】:

    • 这基本上就是我所做的,但它不会持续存在。假设我在用户配置文件中设置了 ID,我还想访问主页或任何其他页面上的变量。如果我按照您的方式设置它并通过 echo Yii::app()->user->subId; 调用它,它将返回 Undefined property: UWebUser::$subId。我需要在不可能的每个页面上设置它。
    • 找到了。 Yii::app()->user->setState('subID', ##); 这将使它跨页面持续存在。感谢您的帮助 =)
    • 嗯,是的,这实际上是比我尝试做的更好的解决方案。这将在会话中保存它,同时应该足以满足您的需求。很高兴我能帮上忙。
    猜你喜欢
    • 2020-11-08
    • 2021-04-13
    • 2018-05-26
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2021-05-22
    • 2017-11-08
    • 2016-07-28
    相关资源
    最近更新 更多