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

Роли и права: новая система RBAC v2

К
Команда CRMservice
обновлено
· 6 мин чтения · 0 просмотров

В CRMservice работает гибкая система прав RBAC v2 — на основе registry (permissions + roles + mappings), с маскированием чувствительных полей и локационным скопом (юзер видит только свою локацию).

Это новая система, она вытесняет старую (legacy v1 на JSONB-permissions, оставлена для совместимости). По умолчанию для новых ролей используется v2.

Что нового в v2

ВозможностьОписание
Registry правПолный каталог прав в БД (resource × action), а не магические строки в коде
Шаблоны ролейГотовые «Менеджер», «Кассир», «Мастер», «Руководитель» — назначаешь и не настраиваешь сотни галок
Маскирование полейСотрудник может видеть заказ, но без полей «себестоимость» / «маржа» / «зарплата мастера»
LocationscopeМожно ограничить юзера своей локацией (показывать заказы только из неё)
WORM аудитВсе изменения ролей записываются в неизменяемый журнал (audit_log_rbac, партиционированный по месяцам)
Снимок прав в JWTПри выпуске access-токена в JWT встраивается финальный набор прав. Не нужна дополнительный запрос к БД на каждом запросе → быстрее

Маскирование полей (важная фича)

Это позволяет показать одну и ту же сущность по-разному разным ролям. Например, заказ:

ПолеМенеджерКассирРуководитель
Номер заказа
Клиент
Сумма
Себестоимость
Маржа
Зарплата мастера
Имя мастера

Поля группируются в «группы маскирования» (HiddenFieldGroups): financial.cost, financial.margin, personal.salary, и т.п. Можно назначить группу запрещённой для роли — и поля исчезнут из всех JSON-ответов API.

Что в коде

  • internal/rbac/registry — описание всех прав и ролей.
  • MaskingCatalog — переписывает JSON-ответы, убирает скрытые поля.
  • audit_log_rbac — партиционированный аудит (партиции на квартал вперёд держит rbacEngine.StartPartitionWorker).
  • Снимок прав в JWT — resolved_permissions в access токене.

Настройка

В CRM → Настройки → Роли и права (RolesV2Tab):

  1. Шаблоны ролей — Менеджер / Кассир / Мастер / Руководитель / Бухгалтер. Назначаем сотрудникам.
  2. Кастомная роль — создать новую, начать с шаблона, докрутить отдельные права.
  3. Маскирование — на роли отметить «не показывать группу полей financial.margin».
  4. Локация — если у вас несколько точек, выбрать «показывать только локацию N».

Журнал изменений прав

Все правки прав видны в Настройки → Роли и права → Аудит:

  • Кто изменил роль (включая снимок прав до/после).
  • Когда.
  • Какое право добавлено/убрано.

Записи нельзя удалить или отредактировать — это WORM (Write Once Read Many) журнал. Соблюдает 152-ФЗ и упрощает аудиты.

Что готовим заранее

  1. Структура ролей в компании — кто за что отвечает (на бумаге).
  2. Список локаций (если несколько точек) — заведите в CRM.
  3. Чувствительные поля — что не должны видеть рядовые сотрудники.

Возможные проблемы

  • «У нового сотрудника нет доступа» — забыли назначить роль. Карточка → Роль.
  • «Маржу видит менеджер» — настройте маскирование financial.margin для роли «Менеджер».
  • «Видит чужую локацию» — включите location-scope на роли.
  • «Не могу удалить запись из аудита» — и не нужно. WORM-журнал, удалять нельзя никому, в том числе админу.
Поделиться: Telegram WhatsApp
Помогла ли статья?

Вам также может быть полезно

← Все статьи Не нашли ответ? Напишите в чат поддержки внутри CRM — Алиса (AI) ответит сразу.
Спросить Алису