UnicoreCMS

Роли и права

Как устроены права, маски и исключения

Права в UnicoreCMS устроены почти как в LuckPerms или PEX: строки с точками, маски со звёздочкой, исключения через восклицательный знак. Кто настраивал права на сервере, узнает логику сразу.

Из чего складываются права

Источников четыре, и все они попадают в один список:

  1. Роли. Обычный способ: у каждой есть имя, приоритет и набор строк.
  2. Персональные права пользователя. Приоритетнее ролевых.
  3. Донат. Купленные группы и права могут добавлять веб-права.
  4. Суперпользователь. Этот флаг перекрывает всё, у такого аккаунта есть каждое право в системе.

Синтаксис

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.
  • Начинать с узкого набора и расширять по запросу, а не наоборот.
  • Суперпользователь только для аварий, а не для повседневной работы.
  • Персональные права — исключение, а не правило.

Проверять удобнее всего вживую: зайдите под тестовым аккаунтом с новой ролью и посмотрите, что видно в админке. Пункты меню, на которые прав нет, просто не появятся.

Содержание