Я бы сериализовал свойство "электронная почта" объекта "Пользователь", только если зарегистрированный пользователь имеет тот же идентификатор, что и объект.
Пользователь: Пользователь:
@Entity()
@Exclude()
export class User {
@Expose()
@PrimaryGeneratedColumn("uuid")
id: string;
@Expose() // Only if logged user == this
@Column({nullable: true, default: null})
public email: string;
@Expose()
@Column({nullable: true, default: null})
public username: string;
@Column({nullable: true, default: null})
public password: string;
@CreateDateColumn()
public create_at: Date;
@UpdateDateColumn()
public update_at: Date;
}
Нет прямого способа условного исключения свойств, основанных на самом объекте. Вы можете использовать группы, но для контроля экспозиции:
@Expose({ groups: ['owner'] })
@Column({nullable: true, default: null})
public email: string;
а затем в контроллере вы добавляете группу в зависимости от вашего состояния:
const groups = [];
if (isCurrentUser) {
groups.push('owner');
}
classToPlain(user, { groups })
Вы можете сделать что-то вроде этого:
@Entity()
@Exclude()
export class User {
@Expose()
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({nullable: true, default: null})
public email: string;
public connectedUser: string?;
@Expose({ name: 'email'}) // Only if logged user
public get hideableEmail(): string? {
if(this.email === this.connectedUser) {
retun this.email;
}
return null;
}
@Expose()
@Column({nullable: true, default: null})
public username: string;
@Column({nullable: true, default: null})
public password: string;
@CreateDateColumn()
public create_at: Date;
@UpdateDateColumn()
public update_at: Date;
}
ClassSerializerInterceptor
на глобальном уровне. Знаете ли вы, можно ли добавить ReflectMetada к нему? Например:ReflectMetadata(CLASS_SERIALIZER_OPTIONS, {groups: ['user']});