设计一个用户可以访问任务的系统

Designing a system in which user can give access to tasks

我正在设计一个小型系统,其中将有两个模型(当前)。

用户可以创建任务。并且可以邀请另一个用户执行任务并授予他只读或读写访问权限。我能够为它们中的每一个创建模型,但我无法弄清楚与用户访问相关的关系。

这是我的模型

// user.entity.ts

@Entity()
@Unique(['email'])
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  email: string;

  @Column()
  first_name: string;

  @Column()
  last_name: string;

  @Exclude()
  @Column()
  password: string;

  @OneToMany(() => Task, (task) => task.user, { eager: true })
  task: Task[];
}

// task.entity.ts

@Entity()
export class Task extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  content: string;

  @Exclude()
  @ManyToOne(() => User, (user) => user.task, { eager: false })
  user: User;

  @Column()
  userId: number;
}

我对数据库和模型还很陌生。我想创建一个将 task_id、user_id、access_role 作为列的实体,但我无法从中前进。

你所描述的 M:M 之间的关系 User:Task。这些类型关系通常用交集 table 来解决——你对另一个实体的想法是正确的。在这种情况下可能 User_Task table。交集 table 通常包含与该组合相关的属性。这将是用户对任务的授权。所以这里是这样的:(假设 user_id 是 PK 到用户 table 和 task_id 是 PK 到任务 table 并且每个都是整数:(对不起,我必须只给出 SQL 因为我不知道你的混淆层 - TypeORM?)

create table user_task
       ( user_id integer    
       , task_id integer
       , access  text  constraint access_ck check (access in ('RO', 'RW'))
       , constraint user_task_pk 
                    primary key (user_id, task_id) 
       , constraint user_task_2_user_fk 
                    foreign key (user_id)
                    references users(user_id) 
       , constraint user_task_2_task_fk 
                    foreign key (task_id)
                    references tasks(task_id) 
       );

上面描述了最小的情况,现在是困难的部分。这涉及到你的设计:

仅考虑Task_1:

  • 用户可以邀请自己吗?第一个用户如何分配给 任务?
  • 当user_a邀请user_b时,user_a是否有进一步的影响或作用 关于 user_b 任务关系。如果是什么?
  • user_b现在可以邀请user_c吗?任何时间,或取决于访问权限。
  • user_a 邀请 user_c 之后 user_b 邀请会发生什么 user_c?
  • 当访问权限不同时,上面会发生什么。

我相信还有很多其他人。上面的答案可能会更改 table 列。