如何将已登录用户添加到Joomla 2.5用户组?

3
当我们的“注册”用户下订单时,我们有一个插件成功地将他们添加到另一个名为“客户”的用户组中。在流程中使用JUserHelper::addUserToGroup()非常顺畅。
问题在于,即使用户记录已经正确更新,他们已经登录,所以他们被迫注销并重新登录以获得他们需要的必要ACL。
我已经搜索了所有的jUser代码和文档,但找不到一种方法来修改目前由$user =& JFactory::getUser();产生的当前登录用户。
我希望答案对于那些比我更了解Joomla MVC的人来说可能是显而易见的,但是我看了所有的代码,试图找到一种实现这一点的方法,我的头脑正在飞速运转。
更新:
Lodder的答案在技术上是可行的,但是尽管“用户组”实际上已经被更新,但AuthGroups和AuthLevels没有被更新。在运行我的代码后,$user对象确实显示其中的组,但在对象的底部,情况并不如此。
        [_authGroups:protected] => Array
            (
                [0] => 1
                [1] => 2
            )

        [_authLevels:protected] => Array
            (
                [0] => 1
                [1] => 1
                [2] => 2
            )

目前看来,由于所有的保护措施,似乎没有办法在当前会话中更改此设置。唯一更新此设置的地方是在 user.php 的 $identities = $this->getAuthorisedGroups(); 处,该代码仅在首次遇到时执行。


我刚刚对此进行了一些研究,发现有一种方法可以实现,但我认为这很困难,因为用户所属的用户组在会话中,因此他们需要重新登录。我会继续寻找并告诉你,因为我也想找到答案。对于这个好问题点赞。 - Lodder
我刚刚在考虑调用注销和登录函数,但似乎会触发与此相关的所有/任何事件 - 目前不确定这实际意味着什么,但是.... - GDP
1
这基本上是一个已知的问题。会话数据很难更改,因为用户可能多次登录等等。 - Elin
1个回答

0

我找到了这个,但我不能百分之百确定它能在你的情况下起作用。最好试一试:

$user = JFactory::getUser();
if ($user->id == $user['id']){
   $session = JFactory::getSession();
   $session->set('user', new JUser($user->id));
}

已知对一些人有效。

如果有效,请告诉我,如果无效,我会看看还能找到什么。


谢谢您,先生。我现在正在进行调试,所以将会看一下它能否正常工作。 - GDP
更新了问题,说明了这个答案的缺点...它在技术上是可行的,但活动ACL信息并没有反映新的组,并且似乎没有办法改变它。 - GDP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接