Роли и права
Как устроены права, маски и исключения
Права в UnicoreCMS устроены почти как в LuckPerms или PEX: строки с точками, маски со звёздочкой, исключения через восклицательный знак. Кто настраивал права на сервере, узнает логику сразу.
Из чего складываются права
Источников четыре, и все они попадают в один список:
- Роли. Обычный способ: у каждой есть имя, приоритет и набор строк.
- Персональные права пользователя. Приоритетнее ролевых.
- Донат. Купленные группы и права могут добавлять веб-права.
- Суперпользователь. Этот флаг перекрывает всё, у такого аккаунта есть каждое право в системе.
Синтаксис
admin.users.read конкретное право
admin.users.* все права ветки admin.users
admin.* вся админская ветка
!admin.users.delete запрет, даже если разрешено маскойЗвёздочка раскрывается в саму ветку тоже: admin.users.* даёт и admin.users, и всё, что под ним.
Запреты всегда сильнее разрешений, где бы они ни стояли. admin.* вместе с !admin.users.delete даёт полный доступ к админке, кроме удаления пользователей.
Приоритет ролей
Роли применяются по возрастанию приоритета: чем выше число, тем позже роль накладывается и тем сильнее перебивает предыдущие. Персональные права идут последними, после всех ролей.
Ветки прав
| Префикс | Про что |
|---|---|
admin.* | Админка: пользователи, серверы, страницы, почта, вебхуки, дашборд |
editor.* | Контент и коммерция: новости, моды, товары, донат, подарки |
user.* | Возможности игрока в кабинете |
kernel.* | Служебные доступы для лаунчера и плагина |
Разделение admin и editor придумано под типичную команду: администратор занимается игроками и деньгами, редактор правит тексты и витрину. Роли admin (admin.*) и editor (editor.*) создаются командой pnpm run seed.
Права-товары
Ветка user.* перечисляет, что игроку доступно в кабинете. Часть этих прав идёт в магазин как товар:
| Право | Что открывает |
|---|---|
user.cabinet.skin / user.cabinet.skin.hd | Загрузка скина, обычного и HD |
user.cabinet.cloak / user.cabinet.cloak.hd | То же для плащей |
user.cabinet.transfer | Переводы другим игрокам |
user.cabinet.exchange | Обмен реальной валюты на игровую |
user.cabinet.unban.buy | Покупка разбана |
user.payment | Пополнение баланса |
user.donate.group.buy / user.donate.permission.buy | Покупка привилегий и прав |
user.cabinet.2fa.on / user.cabinet.2fa.off | Управление двухфакторкой |
user.cabinet.gift.activate | Активация подарочных кодов |
В донат уходят только `user.`
Веб-права, которые идут вместе с купленной привилегией, валидация обрезает по префиксу user.. Продать admin.* через донат не выйдет, даже если вписать его руками.
Две служебные роли
Сервер создаёт их сам при первом запуске и помечает как системные. Удалить такую роль нельзя, а содержимое править можно.
| ID | Название | Права | Кому |
|---|---|---|---|
default | Игрок | user.*, !user.cabinet.*.hd | Всем автоматически |
banned | Заблокированный | !user.cabinet.transfer | Автоматически, пока действует бан |
В роли default игроку разрешено всё в кабинете, кроме HD-скинов и HD-плащей, потому что их продают. Если раздаёте HD бесплатно, уберите исключение из роли.
banned вешается и снимается сама, вместе с баном. Приоритет у неё выше, чем у default, поэтому её запреты побеждают. Всё, что нужно отобрать у забаненного, дописывайте туда же с восклицательным знаком.
Как раздавать доступы
Практика, которая не разваливается через полгода:
- Роль на команду, а не на человека.
moderator,shop-editor,support. - Начинать с узкого набора и расширять по запросу, а не наоборот.
- Суперпользователь только для аварий, а не для повседневной работы.
- Персональные права — исключение, а не правило.
Проверять удобнее всего вживую: зайдите под тестовым аккаунтом с новой ролью и посмотрите, что видно в админке. Пункты меню, на которые прав нет, просто не появятся.