Ребилд системы ролей.
Изначально, было принято решение реализовать три фиксированные роли: владелец, админ, участник. Каждая с жёстко прошитым набором прав. Осознанный риск.
Чем дольше использовали приложение, тем чаще посещала мысль, пора сделать "красиво". Заняло немного намного больше времени чем ожидали, зато укрепилось понимание в необходимости проработке детальной роудмапы заранее, дабы не делать временных решений которые впоследствии отнимут х3 времени на переделки.
Что теперь есть
Глобальные роли — создаёшь один раз в настройках, используешь во всех комнатах. Например, "Дворецкий" с правом приглашать, или "Гавриил" с правом мутить и кикать. Создал один раз — добавил в нужные комнаты.
Роли комнаты — уникальны для одной конкретной комнаты. Если нужна роль которая нигде больше не нужна.
Назначить роль — классический для всех ux, ПКМ на участника в комнате.
Как это работает
Глобальные роли кэшируются локально с привязкой к пользователю. При входе другого пользователя — кэш очищается немедленно, не после загрузки, чтобы не показать чужие роли даже на долю секунды. Это решает проблему, если используешь несколько аккаунтов на одном девайсе.
Были размышления, стоит ли реализовывать механизм permission cap, то есть — ты не можешь выдать роль с правами которых у тебя самого нет. С одной стороны — зачем? Пользователь не будет давать права доступа на управление ролями всем подряд, тем более вредителям. С другой стороны, как понять кто вредитель?