WIKI / АВТОРИЗАЦИЯ

RBAC, группы и scopes

Роль представляет назначенное полномочие, но его эффективное значение зависит от групп, составных ролей, realm и модели приложения.

RustCloak / Технические материалы · Сверяйте примеры с используемой версией проекта.

Эффективные полномочия

В RustCloak роли могут назначаться напрямую пользователю, наследоваться через группы и раскрываться через составные роли. Для чтения вычисленных данных используются claims.

Effective roles
User roles + Group roles + Composite roles + Default roles

Упрощённая концептуальная формула, не описание точного SQL-запроса.

Группы и иерархия

Если группа вложена в другую, наследование зависит от направления обхода. Для предотвращения неограниченной рекурсии нужна максимальная глубина. Для текущей реализации RBAC в проекте используется ограничение MAX_GROUP_DEPTH = 20.

Кэш и отзыв доступа

Вычисление дерева ролей на каждый запрос может быть дорогостоящим. В проектной реализации используется кэш claims, который нужно инвалидировать при изменении назначений и правил доступа. Для оценки поведения особенно важны тесты отзыва ролей.

Граница realm

Операции с пользователем, группой или ролью требуют проверки, что все связанные сущности принадлежат одному realm. Отсутствие такой проверки может привести к межарендному повышению полномочий.

Практические правила

  • Сначала описывайте бизнес-операции, затем формируйте роли.
  • Не выдавайте административные роли по умолчанию.
  • Обновляйте кэш прав после всех изменяющих операций.
  • Проверяйте доступ на backend, даже если UI скрывает запрещённые действия.
  • Тестируйте составные роли, циклы и пересечение realm как негативные сценарии.

Подробнее: инженерная заметка о наследовании ролей →