簡體   English   中英

NestJS 為不同用戶角色排除字段的策略?

[英]NestJS strategy for excluding fields for different user roles?

假設我有一個基本實體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?

使用 class-transformer,您可以使用groups屬性僅公開某些組/角色的屬性:

import {Exclude, Expose} from "class-transformer";

@Exclude()
export class User {

    @Expose({ groups: ["admin"] })
    secret: string;
}

關於如何將ClassSerializerInterceptor與組一起使用,請參閱以下答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM