我想创建用户权限管理。我将 TypeORM 与 PostgreSQL 结合使用。这是用户实体内权限的列定义:
@Column({
type: 'text',
array: true
})
permissions: UserPermission[] = [];
这是UserPermission
enum:
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')
}
});
如果有人能指出我正确的文档页面,我将非常感激:)
Edit:
以下对我有用,但我认为它还不是最佳的:
@Column('simple-json')
permissions: string[];
let user = await this.userRepository.createQueryBuilder('user')
.where('user.permissions like :permissions', { permissions: `%"${UserPermission.SUPERADMIN}"%` })
.getOne();
正如 Mykhalio 提到的,您可以使用 PostgreSQL 数组函数来实现这一目的。
添加更多指针。
- 如果要检查同时具有 USER_ADMIN 和 SUPER_ADMIN 权限的用户。
.where('user.permissions @> :permissions', { permissions:['USER_ADMIN', 'SUPER_ADMIN']})
- 如果您想检查具有 USER_ADMIN 或 SUPER_ADMIN 权限的用户。
.where('user.permissions && :permissions', { permissions: ['USER_ADMIN', 'SUPER_ADMIN']})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)