RBAC (роли и доступы)

Role-Based Access Control — модель управления правами через назначение пользователю роли. Роль — это набор разрешённых действий.

Принцип

Вместо того чтобы выдавать каждому пользователю гранулярные права («можно создавать операции», «можно удалять контрагентов»), пользователю присваивается роль с заранее определённым набором прав. При смене роли права меняются.

В inCash

4 стандартных роли с фиксированными правами:

| Роль | Сила | |---|---| | OWNER | Всё | | ADMIN | Всё, кроме биллинга | | EDITOR | Чтение + создание / редактирование, без удаления | | VIEWER | Только чтение |

Плюс кастомные должности — собственные роли с гранулярным набором прав. См. Кастомные должности.

Где применяется

Два уровня:

  1. API — каждый POST / PATCH / DELETE проверяет роль через requireRole(уровень). Возвращает 403 Forbidden если роль ниже.
  2. UI — кнопки мутаций (Доход / Расход / Перевод, edit / delete в таблицах) скрываются для VIEWER. Это для чистоты UX — клик и так бы вернул 403.

Скоп — компания

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

Текущее ограничение

Кастомные должности под капотом пока работают как VIEWER — гранулярные права декларативны. См. Кастомные должности.

Альтернативы RBAC

  • ACL (Access Control List) — на каждый ресурс свой список «кому можно». Гранулярнее, но сложнее.
  • ABAC (Attribute-Based) — права считаются динамически по атрибутам (роль + проект + тип сущности). Гибко, но сложно настраивать.

inCash выбрал RBAC — это компромисс между гибкостью и простотой. Подходит большинству команд.