postgresql - TypeORM 多对多关系高效查询
问题描述
import { Entity, Column, BaseEntity, ManyToMany, JoinColumn, PrimaryColumn } from 'typeorm';
@Entity()
export class Permission extends BaseEntity {
@PrimaryColumn()
code: string;
}
@Entity()
export class Role extends BaseEntity {
@PrimaryColumn()
code: string;
@ManyToMany(() => Permission, { cascade: false })
@JoinColumn()
permission: Permission[];
}
@Entity('users')
export class User extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ unique: true })
email: string;
@ManyToMany(() => Role)
@JoinColumn()
roles: Role[];
@ManyToMany(() => Permission)
@JoinColumn()
permissions: Permission[];
}
hasPermission(user: User, code: string): Boolean => {
// ...
}
我想有效地检查用户是否有权限。即 John 是具有角色['inventoryManager']
和权限的用户['listing:delete']
。并且角色inventoryManager
有权限['listing:read', 'listing:update']
。所以,John.hasPermission('listing:update')
两者John.hasPermission('listing:delete')
都会返回true
,而John.hasPermission('listing:create')
应该返回false
。
虽然我可以选择全部然后循环将是一个解决方案,但我认为效率低下且过度选择。
解决方案
您是否考虑过使用 QueryBuilder?https://github.com/typeorm/typeorm/blob/master/docs/select-query-builder.md#getting-the-generated-query
然后,您可以查看查询输出并尝试不同的连接和过滤策略并比较它们的效率。
推荐阅读
- php - 将匿名类设置为函数的参数
- java - 使用spring-boot-maven-plugin从依赖jar中拆分版本号?
- python - 张量流重塑和调整层大小的错误
- java - Java 初始化注解数组
- c# - C# 中的 Patch API 调用不起作用,相同的调用在 swagger 中起作用
- php - .htaccess 重定向 /subpage/ 到 /subpage?/wp-login
- xamarin.forms - 只添加一次数据
- apache-spark - Spark 是否尊重 kudu 的哈希分区,类似于 parquet 表上的桶连接?
- jquery - 执行期间不显示动态 jQuery html 修改?
- php - PHP 从页面中解析数据