【问题标题】:TypeORM ManyToMany relationship efficient queryTypeORM 多对多关系高效查询
【发布时间】:2020-09-02 09:03:58
【问题描述】:
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

虽然我可以选择所有然后循环将是一个解决方案,但我认为效率低下且过度选择。

【问题讨论】:

    标签: postgresql typescript typeorm typeorm-datamapper typeorm-activerecord


    【解决方案1】:

    您是否考虑过使用 QueryBuilder? https://github.com/typeorm/typeorm/blob/master/docs/select-query-builder.md#getting-the-generated-query

    然后您可以查看查询输出并尝试不同的连接和过滤策略并比较它们的效率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2020-12-03
      相关资源
      最近更新 更多