web-dev-qa-db-ja.com

TypeORMで配列を照会する方法

ユーザー権限管理を作成します。 PostgreSQLでTypeORMを使用します。これは、ユーザーエンティティ内のアクセス許可の列定義です。

  @Column({
    type: 'text',
    array: true
  })
  permissions: UserPermission[] = [];
 _

これはユーザーパーシッション列挙体です。

export enum UserPermission {
  APP_USER = 'APP_USER',
  USER_ADMIN = 'USER_ADMIN',
  SUPERADMIN = 'SUPERADMIN'
}
 _

私は 'SuperAdmin'許可を持っている人の1人のユーザーを見つけたいが、これを行う方法を説明する文書/ githubの問題に正しい場所を見つけることができません。私はすでにこのために1時間以上過ごしました、そして、私はこれが単純な仕事であると思います。

アクセス許可アレイが特定の要素を含み、または複数の要素を含むかどうかを確認するための「含む」のようなものはありますか?

const user = await this.userRepository.findOne({
  where: {
    permissions: Includes('SUPERADMIN')
  }
});
 _

誰かが私を正しいドキュメンテーションページに向けることができるならば、私はとても感謝しています:)


編集:

以下は私にとって機能しますが、まだ最適ではないと思います。

  @Column('simple-json')
  permissions: string[];
 _
    let user = await this.userRepository.createQueryBuilder('user')
      .where('user.permissions like :permissions', { permissions: `%"${UserPermission.SUPERADMIN}"%`})
      .getOne();
 _
5
jofrly

このアプローチを使用しないでください。エラーがゼロで私のために働きます。

let roles = ['ADMIN', 'STUDENT', SECRETARY];
   let user = await this.userRepository.createQueryBuilder('user')
         .andWhere('user.roles IN (:...roles)')
        .setParameter('roles', ...roles).count()
 _
1
uncle-tee

MyKhalioが言及されているように、PostgreSQLアレイ機能を使用してトリックを実行できます。

もう少しポインタを追加してください。

  1. USER_ADMINとSUPER_ADMIN権限の両方を持つユーザーを確認したい場合。
.where('user.permissions @> :permissions', { permissions:['USER_ADMIN', 'SUPER_ADMIN']})
 _
  1. USER_ADMINまたはSUPER_ADMIN権限のいずれかでユーザーをチェックしたい場合。
.where('user.permissions && :permissions', { permissions: ['USER_ADMIN', 'SUPER_ADMIN']})
 _
1
Shijo Joseph