У объекта $modx->user есть нативные методы для управления группами (joinGroup, leaveGroup, isMember и т.п.).
Вот пример с добавлением пользователя в группу в оффдоке: https://docs.modx.com/revolution/2.x/administering-your-site/security/user-groups

Его можно значительно упростить в случае с авторизованным пользователем:
$modx->user->joinGroup($groupId); // Или $modx->user->joinGroup($groupName);
По умолчанию будет назначена роль member. Можно передать другую роль вторым параметром и ранг третьим. Остается только решить вопрос как обновлять текущего пользователя. У меня в shopModxBox был для этого процессор (он для примера, обновление групп в нем не предусмотрено): https://github.com/MODX-Club/ShopModxBox/blob/master/core/components/modxsite/processors/web/users/own_profile/update.class.php

Покинуть группу:
$modx->user->leaveGroup(16);
Остальные методы работы с группами надо смотреть в исходном коде (они не все задокументированы). https://github.com/modxcms/revolution/blob/2.x/core/model/modx/moduser.class.php#L572