Skip to main content

Обзор

Cabinet включает полноценную систему управления доступом, объединяющую два подхода:
  • RBAC (Role-Based Access Control) — роли с набором разрешений и иерархией уровней
  • ABAC (Attribute-Based Access Control) — политики с условиями (время, IP-адреса)
Система RBAC/ABAC работает только в Cabinet. В Telegram-боте доступ администраторов по-прежнему определяется через ADMIN_IDS.

Роли и разрешения

30+ секций с индивидуальными действиями. Поддержка wildcard-паттернов.

Политики ABAC

Ограничение по времени суток, IP-адресам. Правило «запрет побеждает».

Журнал аудита

Неизменяемый лог всех действий администраторов с экспортом в CSV.

Совместимость с legacy-доступом

Система полностью обратно совместима. Администраторы из ADMIN_IDS и ADMIN_EMAILS автоматически получают полный доступ (*:*) с синтетическим уровнем 1000 — выше любой RBAC-роли. RBAC-роли нужны только для дополнительных сотрудников с ограниченным доступом.

Роли

Иерархия уровней

Каждая роль имеет уровень (level) от 0 до 999. Пользователь может управлять только ролями ниже своего уровня.

Предустановленные шаблоны

При создании роли доступны готовые шаблоны разрешений: Шаблоны можно модифицировать — они задают начальный набор разрешений при создании роли.

Системные роли

Роли с флагом is_system=true нельзя удалить. Последний суперадмин (level 999) защищён от удаления.

Разрешения

Формат

Каждое разрешение — строка в формате секция:действие:

Реестр разрешений

read edit block delete sync promo_group balance subscription send_offer referral
read reply close settings
read export
read create edit delete send
read create edit delete
read create edit delete
read create edit delete
read create edit delete send
read create edit delete stats
read approve revoke
read approve reject complete
read
read edit
read create edit delete sync
read sync manage
read
read edit
read create edit delete assign
read export
channels · ban_system · wheel · apps · email_templates · pinned_messages · updates — у каждой секции свой набор действий

Wildcard-сопоставление

Разрешения поддерживают glob-паттерны (fnmatch):

Политики ABAC

Политики ABAC дополняют RBAC — они оцениваются после проверки разрешений роли. Политика может разрешить или запретить доступ с учётом условий.

Эффекты

Правило: если хотя бы одна политика deny совпала — доступ запрещён, независимо от разрешений роли.

Условия

Временной диапазон

Ограничение по времени (UTC). Формат: {"start": "09:00", "end": "18:00"}

IP-адреса

Белый список IP: ["192.168.1.0/24", "10.0.0.1"]. Поддерживает CIDR и отдельные адреса.

Примеры политик

Запретить удаление пользователей в нерабочее время:
Доступ к админке только из офисной сети:

Приоритет

Политики оцениваются в порядке priority (больше = раньше). Первая совпавшая deny-политика немедленно блокирует доступ.

Назначение ролей

Базовое назначение

Роль назначается пользователю через админ-панель Cabinet: Роли → Пользователи роли → Назначить.

Временное назначение

Роль может иметь дату истечения (expires_at). После этой даты роль автоматически деактивируется — удобно для подрядчиков и временных сотрудников.

Множественные роли

Пользователь может иметь несколько ролей одновременно. Итоговые разрешения — объединение всех разрешений из активных ролей.

Журнал аудита

Все действия администраторов записываются в неизменяемый журнал аудита:

Фильтрация

Журнал поддерживает фильтрацию по:
  • Пользователю
  • Действию
  • Типу ресурса
  • Статусу (успех / отказ)
  • Диапазону дат

Экспорт

Журнал можно экспортировать в CSV-файл. Требуется разрешение audit_log:export.

Управление через UI

Админ-панель Cabinet содержит полноценный интерфейс для управления RBAC/ABAC:
1

Роли

Раздел Роли (/admin/roles) — список ролей с цветовыми метками, количеством пользователей. Создание и редактирование ролей с матрицей разрешений.
2

Назначение

Внутри каждой роли — список пользователей и кнопка назначения. Указание срока действия для временного доступа.
3

Политики

Раздел Политики (/admin/policies) — создание ABAC-правил с конструктором условий (время, IP). Привязка к конкретной роли или глобальная.
4

Аудит

Раздел Журнал аудита (/admin/audit-log) — просмотр истории всех действий с фильтрами и экспортом.

Защита интерфейса

Каждый элемент UI защищён проверкой разрешений:
  • МаршрутыPermissionRoute блокирует доступ к страницам без нужного разрешения
  • ЭлементыPermissionGate скрывает кнопки и секции, если нет соответствующего разрешения
  • API — каждый endpoint проверяет разрешение через require_permission() и логирует результат

API-эндпоинты

Базовый путь: /cabinet/admin/rbac

Роли

Назначения

Политики

Аудит

Реестр

Безопасность

Иерархия ролей

Нельзя создавать, редактировать или назначать роли с уровнем ≥ своему. Последний суперадмин защищён от удаления.

Deny побеждает

Одна deny-политика ABAC блокирует доступ, даже если RBAC-роль разрешает.

IP-логирование

IP-адрес извлекается из X-Forwarded-For / X-Real-IP и сохраняется в аудит-логе.

JWT + Telegram

Кросс-валидация JWT-токена и X-Telegram-Init-Data предотвращает повторное использование токена.