【发布时间】:2021-03-27 06:03:24
【问题描述】:
在 NestJS 路由中,我想根据请求(用户角色)序列化响应。这意味着我需要将选项groups: [] 传递给ClassSerializerInterceptor 中的transformToPlain 方法,这样class-transformer 才能正确返回过滤格式:
我刚刚扩展了这个类,并根据请求将intercept 方法更改为还包括group 选项:
export class CustomClassSerializerInterceptor extends ClassSerializerInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
// @ts-ignore
const contextOptions = this.getContextOptions(context);
const options = {
...this.defaultOptions,
...contextOptions,
groups: request.user.roles // Pseudo
};
return next
.handle()
.pipe(map((res: PlainLiteralObject | Array<PlainLiteralObject>) => this.serialize(res, options)));
}
}
我的实体:
export class Content extends BaseDatabaseEntity {
@Column()
@Transform((type) => EContentType[type])
type: EContentType;
@Expose({ groups: ["MODERATOR", "ADMIN"] })
@Column({ default: "[]", type: "json" })
data: TContentDataColumn[];
}
这是正确的做法吗?例如 this.getContextOptions 方法在原始源代码中是私有的,所以我需要在这里执行 ts-ignore,以覆盖在我看来是大禁忌的类的默认预期隐私。
我什至应该根据用户的角色转换 API 响应,还是反模式?
【问题讨论】:
标签: typescript nestjs interceptor