Стратегия NestJS для исключения полей для разных пользовательских ролей? - PullRequest
0 голосов
/ 11 ноября 2019

Допустим, у меня есть базовая сущность ShopsEntity, в которой есть куча полей и секретное свойство:

@ObjectType()
class ShopsEntity {

   @Field()
   name: string;

   @Field()
   rating: string;

   @Field()
   secret: string;
}

Я не хочу, чтобы секретное свойство было сериализовано, если только пользовательимеет определенную роль, определенную с помощью Управление доступом к гнездам (этот модуль позволяет размещать только RoleGuards на самих преобразователях, что означает, что для каждой роли мне потребуются разные маршруты).

Итак, послезапросив к одной и той же конечной точке с разными уровнями аутентификации, администратор получит:

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

, а обычный запрашивающий пользователь получит:

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

Существует ли декларативный способ, которым яздесь можно обеспечить безопасность на уровне свойств или лучшее решение, имеющее отдельные DTO для каждого уровня безопасности?

1 Ответ

0 голосов
/ 12 ноября 2019

С помощью класса-преобразователя вы можете использовать свойство groups для предоставления свойств только для определенных групп / ролей:

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

@Exclude()
export class User {

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