ユーザー権限管理を作成します。 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();
_
このアプローチを使用しないでください。エラーがゼロで私のために働きます。
let roles = ['ADMIN', 'STUDENT', SECRETARY];
let user = await this.userRepository.createQueryBuilder('user')
.andWhere('user.roles IN (:...roles)')
.setParameter('roles', ...roles).count()
_
MyKhalioが言及されているように、PostgreSQLアレイ機能を使用してトリックを実行できます。
もう少しポインタを追加してください。
.where('user.permissions @> :permissions', { permissions:['USER_ADMIN', 'SUPER_ADMIN']})
_
.where('user.permissions && :permissions', { permissions: ['USER_ADMIN', 'SUPER_ADMIN']})
_