Управление доступом на основе ролей с динамическими ролями - PullRequest
0 голосов
/ 03 октября 2019

У нас есть гнездовое приложение, которое должно реализовывать 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 - это только строка, которая затем сопоставляется со статическими ролями пользователя. Итак, вот вопрос: как я могу реализовать что-то подобное с динамическими ролями, например роль супервизора, которая является динамической в ​​контексте только для определенных элементов.

...