相关疑难解决方法(0)

是否可以“保护”属性并将其从选择语句中排除

我想在数据层级别保护某些属性。例如,我想保护我为用户存储在数据库中的密码哈希,这样它就不会出现在任意的select语句中。

仅当在select property, property2语句中明确请求时才采用这种方式。

typeorm

11
推荐指数
2
解决办法
2万
查看次数

NestJS - 基于一个属性有条件地验证主体

我正在尝试找到一种使用 DTO(使用辉煌class-validatorclass-transformer库)验证主体的好方法。它工作得非常好,即使对于嵌套结构也是如此,但在我的情况下,我希望根据某些条件拥有 body 属性。

可能有助于理解的示例:

让我们想象一下我的身体应该总是有selectedCategory。根据该字段,内容可能来自类别 1,其中包含prop1OR 来自类别 2,其中包含prop2.

我不想让他们两个都为空,我真的想要么已经prop1定义要么prop2基于selectedCategory.

我认为我可以使用管道,但是如何指定要使用的正确 DTO?

我已经构建了一个“基”类,其中包含所有公共属性和一些继承自它的其他类。

我可以根据属性手动实例化管道selectedCategory,这是理想的,但我不知道将什么作为管道的第二个参数(元数据)传递。

谢谢你的帮助。

node.js typescript class-validator nestjs class-transformer

7
推荐指数
2
解决办法
8124
查看次数

如何使用 toJSON 更改序列化实体的属性名称?

我想序列化一个属性,其名称与实体中的名称不同。

@Entity()
export class MyEntity {
  // This should be serialized with name_column in JSON
  @Column()
  name: string
}
Run Code Online (Sandbox Code Playgroud)

当我打电话时classToPlain,我希望将属性name序列化为name_column

classToPlain(myEntity)
// returns: {name: 'my name'}
// should be: {name_column: 'my name'}
Run Code Online (Sandbox Code Playgroud)

serialization node.js typescript nestjs class-transformer

4
推荐指数
1
解决办法
1万
查看次数

序列化:如何排除json响应中的Entity列,但不排除Nestjs中的内部查询

编辑
我已经看过这个问题/答案如何从控制器json中排除实体字段
但是,如下所示-这是从所有查询中排除该字段(到porint,在尝试处理用户验证时,使用在不具有ClassSerializerInterceptor的路由/控制器方法上的findOne存储库查询

我在nest.js / typeorm中有一个实体;我试图从返回的json中排除密码字段,但不从我的服务中的任何存储库查询中排除密码字段。例如:

user.entity.ts

import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, 
UpdateDateColumn, ManyToOne } from 'typeorm';
import { Exclude } from 'class-transformer';
import { Account } from '../accounts/account.entity';

@Entity()
export class User {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column()
  firstName: string;

  @Column()
  lastName: string;

  @Column({
    unique: true,
  })
  email: string;

 @Column()
 password: string;
}
Run Code Online (Sandbox Code Playgroud)

auth.controller.ts

import { Controller, Post, Body, Request, Req, Get, UseInterceptors, ClassSerializerInterceptor, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import …
Run Code Online (Sandbox Code Playgroud)

javascript node.js typescript nestjs class-transformer

3
推荐指数
1
解决办法
1105
查看次数

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

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

@ObjectType()
class ShopsEntity {

   @Field()
   name: string;

   @Field()
   rating: string;

   @Field()
   secret: string;
}
Run Code Online (Sandbox Code Playgroud)

我不希望序列化秘密属性,除非用户具有通过Nest Access Control定义的特定角色(该模块仅允许将 RoleGuard 放置在解析器本身上,这意味着每个角色需要不同的路由)。

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

{
  "name": "name",
  "rating": "rating",
  "secret": "secret"
}
Run Code Online (Sandbox Code Playgroud)

常规查询用户将得到:

{
  "name": "name",
  "rating": "rating"
}
Run Code Online (Sandbox Code Playgroud)

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

javascript node.js typescript nestjs class-transformer

3
推荐指数
1
解决办法
5646
查看次数