我们有一个应用程序需要实现 RBAC(基于角色的访问控制)。我根据官方文档添加了一个基本的 Guard 和 Decorator:https://docs.nestjs.com/guards。问题是:这只允许使用静态角色。
我们的目标是:在我们的情况下,我们有一个“合同”实体,只有当合同的承包商 (
看起来像这样:
当然,
我们的目标是:在我们的情况下,我们有一个“合同”实体,只有当合同的承包商 (
<User>
) 或承包商的监督者 (<User>
) 尝试访问它时,该合同才应该被加载。我不想像 if (contract.contractor.id === user.id)
这样实现,因为我们有很多不同的情况,随着时间的推移会变得越来越混乱。看起来像这样:
@Get()
@Roles(ROLES.ADMIN, ROLES.CONTRACTOR, ROLES.SUPERVISOR)
getContractById(...): Contract {
return this.contractService.findById(...);
}
当然,
ROLES.SUPERVISOR
只是一个字符串,它会与用户的静态角色进行匹配。所以这里有个问题:如何使用动态角色来实现这样的功能,比如专门针对某些项目才是动态的监督员角色?