【发布时间】:2020-02-16 21:16:35
【问题描述】:
我想创建用户权限管理。我将 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();
【问题讨论】:
-
不知道有没有办法使用Include函数,在编辑片段中我建议你使用Like()函数,防止SQL注入:{ permissions: Like(
%${UserPermission.SUPERADMIN}%).value })。无论如何将用户权限存储在单独的表中然后建立关系不是更好吗?
标签: node.js postgresql typescript typeorm