我想创建用户权限管理。我在 Postgresql 中使用 Typeorm。这是用户实体中权限的列定义:
@Column({
type: 'text',
array: true
})
permissions: UserPermission[] = [];
Run Code Online (Sandbox Code Playgroud)
这是 UserPermission 枚举:
export enum UserPermission {
APP_USER = 'APP_USER',
USER_ADMIN = 'USER_ADMIN',
SUPERADMIN = 'SUPERADMIN'
}
Run Code Online (Sandbox Code Playgroud)
我想找到一位拥有“SUPERADMIN”权限的用户,但我无法在解释如何执行此操作的文档/github 问题中找到正确的位置。我已经为此花费了一个多小时,我想这是一项简单的任务。
是否有类似“包含”的东西来检查权限数组是否包含特定元素和/或包含多个元素?
const user = await this.userRepository.findOne({
where: {
permissions: Includes('SUPERADMIN')
}
});
Run Code Online (Sandbox Code Playgroud)
如果有人可以将我指向正确的文档页面,我将非常感激:)
编辑:
以下对我有用,但我认为它还不是最佳的:
@Column('simple-json')
permissions: string[];
Run Code Online (Sandbox Code Playgroud)
let user = await this.userRepository.createQueryBuilder('user')
.where('user.permissions like :permissions', { permissions: `%"${UserPermission.SUPERADMIN}"%`})
.getOne();
Run Code Online (Sandbox Code Playgroud) 我有以下不相关的TypeORM 实体(由于各种原因,我无法在它们上使用一对多关系):
@Entity()
export class Book {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
}
@Entity()
export class BookCategory {
@PrimaryGeneratedColumn()
id: number;
@Column()
bookId: number;
@Column()
name: string;
}
Run Code Online (Sandbox Code Playgroud)
对于一本书,两个指定的类别和以下查询:
const query = this.bookRepository
.createQueryBuilder('book')
.leftJoinAndSelect(BookCategory, 'category', 'book.id = category.bookId');
return query.execute();
Run Code Online (Sandbox Code Playgroud)
我得到以下回复:
[
{
"book_id": 1,
"book_name": "Lorem Ipsum",
"category_id": 1,
"category_name": "non-fiction"
},
{
"book_id": 1,
"book_name": "Lorem Ipsum",
"category_id": 2,
"category_name": "documentary"
}
]
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我得到了 2 个对象。有什么方法可以通过 TypeORM 查询获取以下内容吗?
[
{
"id": 1,
"name": "Lorem …Run Code Online (Sandbox Code Playgroud)