Как выставить поле только для текущего пользователя?

1

Я бы сериализовал свойство "электронная почта" объекта "Пользователь", только если зарегистрированный пользователь имеет тот же идентификатор, что и объект.

Пользователь: Пользователь:

@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;
}
Теги:
typeorm
nestjs

2 ответа

1
Лучший ответ

Нет прямого способа условного исключения свойств, основанных на самом объекте. Вы можете использовать группы, но для контроля экспозиции:

@Expose({ groups: ['owner'] })
@Column({nullable: true, default: null})
public email: string;

а затем в контроллере вы добавляете группу в зависимости от вашего состояния:

const groups = [];
if (isCurrentUser) {
  groups.push('owner');
}
classToPlain(user, { groups })
  • 0
    Я использую ClassSerializerInterceptor на глобальном уровне. Знаете ли вы, можно ли добавить ReflectMetada к нему? Например: ReflectMetadata(CLASS_SERIALIZER_OPTIONS, {groups: ['user']});
  • 0
    Извините, я не знаю, с головой. : - / Может быть, открыть новый вопрос для него?
1

Вы можете сделать что-то вроде этого:

@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;
}
  • 0
    Спасибо за Ваш быстрый ответ ! Как я могу получить CurrentUser в сущности?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню