$user->;编辑用户并保存后,groups为null


$user->groups is null after editing user and saving

用户编辑并保存帐户后发生了一些奇怪的事情。一旦用户保存,用户对象内的组数组将为null。

我们设置了它,以便用户可以在多个组中,如Registered和Manager(id 2和15)。因此,当用户登录时,我们可以执行以下操作:

$user = JFactory::getUser();
var_dump($user->groups);

我们得到

array (size=3)
  2 => string '2' (length=1)
  13 => string '13' (length=2)
  25 => string '25' (length=2)

然后,在用户编辑他的帐户、更改某些内容(或不更改任何内容)并保存之后,

var_dump($user->groups);

中的结果

null

我试图通过创建一个插件来解决这个问题,在保存用户后,我们进入数据库,获取用户的组,并将它们插入数组。但当我做以下事情时:

public function onUserAfterSave($juser, $isNew, $result, $error)
{
    if (JFactory::getApplication()->isSite()) {
        $user = JFactory::getUser();
        JFactory::getApplication()->enqueueMessage(json_encode($user->groups), 'message');
    }
}

显示的消息是一个JSON编码的组数组-而不是"null",正如我所期望的那样。因此在onUserAfterSave()中,$user->groups仍然是正确的。在之后的某个时刻,$user->groups决定清空自己。

同样需要注意的是,每次用户注销并重新登录时,组都会重置,并且不再为空。

其他人有这个问题吗?或者有什么建议吗?

也有同样的问题。找到了一个可以解决的肮脏解决方案。您可以使用JACCESS类获取组。

$oUser   = JFactory::getUser();
jimport( 'joomla.access.access' );
$groups = JAccess::getGroupsByUser($oUser->id);
var_dump($groups);