假设我有一个基本实体,ShopsEntity它有一堆字段和一个秘密属性:@ObjectType()class ShopsEntity { @Field() name: string; @Field() rating: string; @Field() secret: string;}我不希望秘密属性被序列化,除非用户具有通过Nest Access Control定义的特定角色(该模块只允许将 RoleGuard 放置在解析器本身上,这意味着每个角色我需要不同的路由)。因此,根据对具有不同身份验证级别的同一端点的请求,管理员将获得:{ "name": "name", "rating": "rating", "secret": "secret"}常规查询用户将获得:{ "name": "name", "rating": "rating"}有没有一种声明式的方式可以在这里进行财产级安全,或者最好的解决方案是为每个安全级别设置单独的 DTO?
1 回答
梦里花落0921
TA贡献1772条经验 获得超6个赞
凭借一流的变压器,您可以使用groups属性仅暴露出某些群体/角色属性:
import {Exclude, Expose} from "class-transformer";
@Exclude()
export class User {
@Expose({ groups: ["admin"] })
secret: string;
}
关于如何使用ClassSerializerInterceptorwith 组,请参阅以下答案。
添加回答
举报
0/150
提交
取消