RBAC (роли и доступы)
Role-Based Access Control — модель управления правами через назначение пользователю роли. Роль — это набор разрешённых действий.
Принцип
Вместо того чтобы выдавать каждому пользователю гранулярные права («можно создавать операции», «можно удалять контрагентов»), пользователю присваивается роль с заранее определённым набором прав. При смене роли права меняются.
В inCash
4 стандартных роли с фиксированными правами:
| Роль | Сила | |---|---| | OWNER | Всё | | ADMIN | Всё, кроме биллинга | | EDITOR | Чтение + создание / редактирование, без удаления | | VIEWER | Только чтение |
Плюс кастомные должности — собственные роли с гранулярным набором прав. См. Кастомные должности.
Где применяется
Два уровня:
- API — каждый POST / PATCH / DELETE проверяет роль через
requireRole(уровень). Возвращает 403 Forbidden если роль ниже. - UI — кнопки мутаций (Доход / Расход / Перевод, edit / delete в таблицах) скрываются для VIEWER. Это для чистоты UX — клик и так бы вернул 403.
Скоп — компания
Роль действует в одной компании. Один пользователь может быть OWNER в своей компании и VIEWER в чужой. При переключении компании в sidebar — меняется и роль.
Текущее ограничение
Кастомные должности под капотом пока работают как VIEWER — гранулярные права декларативны. См. Кастомные должности.
Альтернативы RBAC
- ACL (Access Control List) — на каждый ресурс свой список «кому можно». Гранулярнее, но сложнее.
- ABAC (Attribute-Based) — права считаются динамически по атрибутам (роль + проект + тип сущности). Гибко, но сложно настраивать.
inCash выбрал RBAC — это компромисс между гибкостью и простотой. Подходит большинству команд.