Контекст
Текущая система требует перехода от простых проверок ролей к гибкому управлению доступом на основе атрибутов (ABAC) и разрешений. Использование библиотеки casl позволит централизовать логику авторизации, упростить масштабирование прав доступа для различных сущностей (команд, досок, задач) и обеспечить консистентность проверок как на бэкенде, так и в перспективе на фронтенде.
Технические требования
- Локация логики:
src/features/auth/abilities, src/shared/guards
- Инструменты:
@casl/ability, @casl/prisma (или аналог для используемой ORM).
- Логика работы:
- Создать фабрику
AbilityFactory, которая на основе user.role и user.permissions генерирует объект Ability.
- Описать базовые правила для сущностей:
Project, Board, Task, Team. Например: участник команды может читать доски, но только ADMIN или OWNER может их удалять.
- Реализовать декораторы и глобальный
Guard для автоматической проверки Ability в контроллерах/резолверах.
- Интегрировать проверку владения ресурсом (например,
user_id === task.author_id).
Цель и критерии приемки (Definition of Done)
Важные указания
- Производительность: Использовать ленивую загрузку правил авторизации только при необходимости. Кешировать инстанс
Ability в рамках жизненного цикла запроса.
- Ошибки: Выбрасывать
ForbiddenException (HTTP 403) при недостаточном уровне прав.
- Безопасность: Реализовать принцип "Default Deny" — если правило не описано явно, доступ должен быть запрещен. Обеспечить проверку принадлежности пользователя к команде перед проверкой детальных прав на доску.
Контекст
Текущая система требует перехода от простых проверок ролей к гибкому управлению доступом на основе атрибутов (ABAC) и разрешений. Использование библиотеки
caslпозволит централизовать логику авторизации, упростить масштабирование прав доступа для различных сущностей (команд, досок, задач) и обеспечить консистентность проверок как на бэкенде, так и в перспективе на фронтенде.Технические требования
src/features/auth/abilities,src/shared/guards@casl/ability,@casl/prisma(или аналог для используемой ORM).AbilityFactory, которая на основеuser.roleиuser.permissionsгенерирует объектAbility.Project,Board,Task,Team. Например: участник команды может читать доски, но толькоADMINилиOWNERможет их удалять.Guardдля автоматической проверкиAbilityв контроллерах/резолверах.user_id === task.author_id).Цель и критерии приемки (Definition of Done)
@casl/ability. Созданы базовые типыAppAbility,Actions(manage,create,read, etc.) иSubjects.ADMIN,MEMBER,GUESTимеют корректно разграниченные уровни доступа.Важные указания
Abilityв рамках жизненного цикла запроса.ForbiddenException(HTTP 403) при недостаточном уровне прав.