Пользователи, роли и права

Доступ в панели строится из трёх понятий:

  • Право — одно разрешённое действие, например «запуск игрового сервера».
  • Роль — именованный набор прав. Роль выдаётся пользователю.
  • Прямое разрешение — право, выданное пользователю в обход ролей.

Права можно выдавать глобально или привязывать к конкретному объекту — чаще всего к одному игровому серверу. Именно так пользователю дают доступ к его серверу и ни к чему больше.

Роли по умолчанию

При первоначальном заполнении базы создаются две роли:

Роль Название в интерфейсе Права
admin Administrator admin roles & permissions
user User Нет

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

Право admin roles & permissions, выданное глобально, и есть признак администратора. По нему проверяется доступ к разделу «Администрирование» и по нему же определяется, к кому применяется обязательная двухфакторная аутентификация — см. Безопасность.

Никакой особой роли «суперадминистратор» в панели нет, и пользователь с id = 1 привилегий по умолчанию не имеет: значение имеет только наличие этого права.

Права на игровой сервер

Право Название в интерфейсе
game-server-common Базовые привилегии
game-server-start Запуск игрового сервера
game-server-stop Остановка игрового сервера
game-server-restart Перезагрузка игрового сервера
game-server-pause Пауза игрового сервера
game-server-update Обновление игрового сервера
game-server-files Доступ к файловому менеджеру
game-server-tasks Доступ к заданиям сервера
game-server-settings Доступ к настройкам
game-server-console-view Чтение консоли
game-server-console-send Отправка команд в консоль
game-server-rcon-console RCON консоль
game-server-rcon-players RCON управление игроками
game-server-metrics Доступ к метрикам сервера

game-server-common даёт базовый доступ к серверу: увидеть его в списке и открыть страницу. Без него остальные права практически бесполезны — начинайте с него.

Права на чтение и запись в консоль разделены: game-server-console-view позволяет только смотреть, game-server-console-send — отправлять команды. То же самое с RCON: доступ к консоли RCON и управление игроками выдаются отдельно.

Кроме прав на игровые серверы существуют общие права create, view, edit, delete — они применяются к разделам панели.

Выдача прав на конкретный сервер

«Администрирование»«Пользователи» → выбрать пользователя → «Редактировать».

В форме два блока:

  • РолиAdministrator или User.
  • Игровые серверы — список серверов, к каждому из которых можно отметить нужные права.

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

Через API то же самое делается так:

GET  /api/users/{id}/servers                              — серверы пользователя
GET  /api/users/{id}/servers/{server}/permissions         — права на сервер
PUT  /api/users/{id}/servers/{server}/permissions         — изменить права

Свои права на сервер можно посмотреть запросом GET /api/servers/{server}/abilities.

Как проверяется доступ

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

Запрет сильнее разрешения. Если на нужное право есть запись-запрет, доступ не даётся, независимо от того, сколько разрешений выдано другими путями и в каком порядке они записаны.

Область действия должна совпадать. Право, выданное для одного сервера, не действует на другой. Запрет, поставленный на один сервер, тоже не затрагивает остальные.

Право может быть выдано в трёх областях:

Область Что означает
Глобально Действует везде
На тип объектов Действует на все игровые серверы, все выделенные серверы и так далее
На конкретный объект Действует только на этот сервер

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

Снятие права в интерфейсе не всегда означает просто удаление записи. Если после удаления пользователь всё ещё получает это право через роль, панель дополнительно ставит явный запрет — иначе право вернулось бы обратно через роль.

Кэширование

Кэша два, и это важно при правке прав напрямую в базе.

Слой Переменная По умолчанию Когда действует
В памяти процесса RBAC_CACHE_TTL 30s Всегда
В общем кэше CACHE_TTL_RBAC 24h Только при CACHE_DRIVER=redis

Изменения прав через интерфейс и API сбрасывают кэш сразу. Правки напрямую в базе его не сбрасывают: при кэше в памяти они вступят в силу за 30 секунд, а при CACHE_DRIVER=redis — через сутки. Если правили базу, очистите кэш или перезапустите панель.

Управление пользователями

Метод и путь Назначение
GET /api/users Список пользователей
POST /api/users Создать пользователя
GET /api/users/{id} Данные пользователя
PUT /api/users/{id} Изменить пользователя
DELETE /api/users/{id} Удалить пользователя

Список пользователей доступен только администраторам.

Пароль, задаваемый при создании и изменении пользователя, проходит проверку политики паролей: от 12 до 128 байт и не из списка скомпрометированных. Подробности — Безопасность.

Регистрации пользователей в панели нет: учётные записи создаёт администратор.

Типовые задачи

Дать пользователю доступ к одному серверу

  1. Создайте пользователя: «Администрирование»«Пользователи»«Создать».
  2. Выдайте ему роль User.
  3. В блоке «Игровые серверы» выберите нужный сервер и отметьте права. Минимальный рабочий набор: game-server-common, game-server-start, game-server-stop, game-server-restart.
  4. Добавьте по необходимости: файловый менеджер, консоль, RCON, задания.

Сделать пользователя администратором

Выдайте роль Administrator. Она содержит право admin roles & permissions, дающее полный доступ.

После этого на пользователя начинает распространяться требование двухфакторной аутентификации: при следующем входе он увидит напоминание, а через 30 дней — требование её включить. См. Безопасность.

Забрать доступ, не удаляя учётную запись

Снимите права на серверы и оставьте роль User. Пользователь сможет войти, но не увидит ни одного сервера. Действующие сессии при этом не завершаются — они продолжат работать до истечения срока (24 часа, либо 7 дней при входе с отметкой «запомнить меня»).