Как изменить роль пользователя?
Доброго дня. Как можно изменить роль пользователя в группе плагином?
Не могу найти такого функционала.
Если делать так
Есть только одна идея сначала убирать из группы, а затем сразу добавлять с нужной ролью, но может есть что-то другое?
Не могу найти такого функционала.
Если делать так
$user->joinGroup('Group','Role2');
то роль не меняется.Есть только одна идея сначала убирать из группы, а затем сразу добавлять с нужной ролью, но может есть что-то другое?
Комментарии: 3
Насколько я вижу в api только joinGroup и leaveGroup, так что, похоже, только удалить, потом добавить.
Когда мы делаем
Если упрощённо, то сначала определяет ID группы по её имени (из таблицы modx_membergroup_names), потом — ID роли (таблица modx_user_group_roles). Когда ID-шники определены, происходит создание новой записи в таблице modx_member_groups.
После этого сбрасываются значения параметров сессии:
Для удаления пользователя из группы точно так же нужно найти ID-шник группы по её имени и удалить соответствующую запись из таблицы modx_member_groups.
В итоге запись
Если где-то ранее у нас уже определены ID-шники ролей и групп, то можно внести изменения вручную:
Но через год-полтора будет сложно понять, что тут происходит.
Так что решение о том, какой из способов выбрать, каждый принимает сам.
$user->joinGroup('Group','Role2');
MODX делает несколько запросов в базу данных.Если упрощённо, то сначала определяет ID группы по её имени (из таблицы modx_membergroup_names), потом — ID роли (таблица modx_user_group_roles). Когда ID-шники определены, происходит создание новой записи в таблице modx_member_groups.
После этого сбрасываются значения параметров сессии:
unset($_SESSION["modx.user.{$this->get('id')}.userGroupNames"],
$_SESSION["modx.user.{$this->get('id')}.userGroups"]);
Для удаления пользователя из группы точно так же нужно найти ID-шник группы по её имени и удалить соответствующую запись из таблицы modx_member_groups.
В итоге запись
$user->leaveGroup('Group');
$user->joinGroup('Group','Role2');
сгенерирует минимум 5 запросов к базе данных.Если где-то ранее у нас уже определены ID-шники ролей и групп, то можно внести изменения вручную:
$group_member_arr = array(
'member' => $user->get('id'),
'user_group' => $group_id,
);
if (!$member = $modx->getObject('modUserGroupMember', $group_member_arr) {
$member = $modx->newObject('modUserGroupMember', $group_member_arr);
}
$member->set('role', $role_id);
$member->save();
unset($_SESSION["modx.user.{$this->get('id')}.userGroupNames"],
$_SESSION["modx.user.{$this->get('id')}.userGroups"]);
Но через год-полтора будет сложно понять, что тут происходит.
Так что решение о том, какой из способов выбрать, каждый принимает сам.
Познавательно, спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.