如何在 TypeORM 中查询数组

新手上路,请多包涵

我想创建用户权限管理。我将 TypeORM 与 PostgreSQL 一起使用。这是用户实体中权限的列定义:

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

这是 UserPermission 枚举:

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

我想找到一位拥有 'SUPERADMIN' 权限的用户,但我在解释如何执行此操作的文档/github 问题中找不到正确的位置。我已经在这上面花了一个多小时,我想这是一个简单的任务。

是否有类似“包含”的内容来检查权限数组是否包含特定元素和/或包含多个元素?

 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();

原文由 jofrly 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

正如 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']})

原文由 Shijo Joseph 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题