Здравствуйте!
Я создал несколько подгрупп Registered и меняю их программным путем, типа если что-то там подключается пользователю, то у него меняется группа с "9" (например "Клиент") на, допустим "11" (например "Золотой клиент").
Делаю я это с помощью прямого обращения в базу меняю "group_id" у таблицы "#__user_usergroup_map":
$db =& JFactory::getDBO();
$query = '
UPDATE `#__user_usergroup_map` SET `group_id` = '.$mgroups.'
WHERE `user_id` = '.$muser_id.'
AND `group_id` = '.$mgroup_id.';';
$db->setQuery($query);
$db->Query();
где переменные $mgroups - номер группы, которая стала (11)
$muser_id - ID пользователя, которому меняю группу (883)
$mgroup_id - номер группы, которая была раньше (9)
все переменные защищены от инъекций
Все прекрасно работает, но дело в том, что система не видит смену группы, до переавторизации, т.е. надо выйти и зайти снова. Это крайне неудобно ((
На сколько я понял, это либо какой-то кэш, либо хранится сессия... Я попробовал сбросить сессию командой "session_destroy ()" и теперь автоматом выбрасывает на повторную авторизацию, что работает, но тоже не удобно (
Вот вопрос,
как обновить сессию, чтобы пользователь не приходилось авторизовываться заново?Для всякого я посмотрел, что именно меняется в поле "data" таблицы "#__session":
вот что было до переавторизации:
__default|a:9:{ ... O:5:"JUser":43:{ ... s:6:"groups";a:1:{i:9;s:1:"9";} ... s:14:"\0*\0_authGroups";a:3:{i:0;i:1;i:1;i:2;i:2;i:9;} ... } ... } ...
Вот что стало:
__default|a:9:{ ... O:5:"JUser":25:{ ... s:6:"groups";a:1:{i:11;s:2:"11";} ... s:14:"\0*\0_authGroups";a:4:{i:0;i:1;i:1;i:2;i:2;i:9;i:3;i:11;} ... } ... }
где "..." - много всякой каки-бяки
может как-то можно в сессии поменять параметры, но где и что меня я не знаю ((
Как же после смены группы в базе, пользователю без перезагрузки ее присвоить?