NestJS排除不同用户角色字段的策略



假设我有一个基本实体ShopsEntity,它有一堆字段和一个秘密属性:

@ObjectType()
class ShopsEntity {
@Field()
name: string;
@Field()
rating: string;
@Field()
secret: string;
}

我不希望秘密属性被串行化,除非用户通过Nest Access Control定义了某个角色(该模块只允许将RoleGuards放置在解析器本身上,这意味着每个角色需要不同的路由(。

因此,在向具有不同身份验证级别的同一端点发出请求后,管理员将得到:

{
"name": "name",
"rating": "rating",
"secret": "secret"
}

一个经常查询的用户会得到:

{
"name": "name",
"rating": "rating"
}

有没有一种声明性的方式可以在这里实现属性级安全,或者最好的解决方案对每个安全级别都有单独的DTO?

使用类转换器,您可以使用groups属性只公开某些组/角色的属性:

import {Exclude, Expose} from "class-transformer";
@Exclude()
export class User {
@Expose({ groups: ["admin"] })
secret: string;
}

关于如何将ClassSerializerInterceptor与组一起使用,请参阅以下答案。

相关内容

最新更新