Нечто странное происходит после того, как пользователь отредактировал свой аккаунт и сохранил его. Когда пользователь сохраняет данные, массив групп внутри объекта пользователя становится пустым.
Мы настроили его так, чтобы пользователь мог быть в нескольких группах, таких как «Зарегистрированный» и «Менеджер» (идентификаторы 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-кодированным массивом групп — не «ноль», как я и ожидал. Так что внутри onUserAfterSave () $ user-> groups все еще корректно. Это в какой-то момент после это то, что $ user-> groups решает опустошить себя.
Также может быть важно отметить, что каждый раз, когда пользователь выходит из системы и снова входит в систему, группы сбрасываются, и они больше не равны нулю.
У кого-нибудь еще есть эта проблема или есть какие-нибудь советы?
Была такая же проблема. Нашел грязное решение, чтобы обойти.
Вы можете получить группы с классом JACCESS.
$oUser = JFactory::getUser();
jimport( 'joomla.access.access' );
$groups = JAccess::getGroupsByUser($oUser->id);
var_dump($groups);
Других решений пока нет …