У нас есть гнездовое приложение, которое должно реализовывать rbac. Я добавил базовую защиту и декоратор для нее на основе документов защиты: https://docs.nestjs.com/guards. Проблема: это допускает только статические роли.
Наша цель: в нашем случае у нас есть объект Contract
,Этот контракт должен быть загружен исключительно, если подрядчик контракта (<User>
) или супервайзер подрядчика (<User>
) пытаются получить к нему доступ. Я не хочу реализовывать что-то вроде if (contract.contractor.id === user.id)
и так далее, потому что у нас есть много разных случаев, которые со временем могут привести к путанице.
Это выглядит следующим образом:
@Get()
@Roles(ROLES.ADMIN, ROLES.CONTRACTOR, ROLES.SUPERVISOR)
getContractById(...): Contract {
return this.contractService.findById(...);
}
Конечно, ROLES.SUPERVISOR
- это только строка, которая затем сопоставляется со статическими ролями пользователя. Итак, вот вопрос: как я могу реализовать что-то подобное с динамическими ролями, например роль супервизора, которая является динамической в контексте только для определенных элементов.