Роли и права без сотни if: как построить RBAC

Permissions matrix, ownership и policy layer вместо условий по всему проекту.

Зачем разбирать эту тему

Проверка `role == admin` работает, пока ролей две. Потом появляются редактор, бухгалтер, менеджер и внешний подрядчик, и условия начинают противоречить друг другу.

Как устроена задача на практике

Сначала составляем permissions matrix: ресурс, действие и роль. В коде спрашиваем `can(invoice.create)`, а роль становится набором разрешений, который можно менять отдельно от бизнес-логики.

Что важно в production

Ownership — отдельный слой: клиент может читать проект только своей организации. Policy объединяет permission и отношение пользователя к объекту.

Типичные ошибки

Главная ошибка — выбирать технологию или паттерн раньше, чем сформулирован пользовательский сценарий и ограничения. Второй частый промах — проверять решение только на идеальном happy path и не продумывать восстановление после сбоя, повторный запрос и права доступа.

Практический вывод

Frontend скрывает недоступное действие для UX, но сервер всегда повторяет проверку. Изменение ролей и чувствительный доступ фиксируются в audit log.

  • фиксируйте допущения до реализации;
  • проверяйте решение на реальных данных и устройствах;
  • сохраняйте наблюдаемость и возможность безопасного отката;
  • усложняйте архитектуру только когда это подтверждает задача.
PSP / EDITORIAL

Есть задача, где это решение нужно применить на практике?

← Все материалыОбсудить проект ↗