问题描述
我正在使用HotChocolate使用Graphql在asp.net核心中创建一个代码第一个EFCore应用程序,似乎正在使很多重复的多对多关系来限制访问或限制对允许个人通过的特定项目的访问api。
在上下文中,模式是描述一个项目的一系列一对多实体,因此咨询>客户>程序>项目,然后一个项目之间的一系列一对多关系,各个实体描述了项目本身的各个方面,即风险,收益,任务,依赖项,约束,预算,注释,文件等...(每个都是实体类型,因此是数据库表。
我已经实现了基于令牌的身份验证来访问API,所以做了“谁可以访问应用程序”部分。
我已经实现了基于角色的授权,以允许访问某些类型的资源,例如为访问管理任务的模块支付了许可证费用,或者存在风险。因此,请完成“允许他们使用应用程序的哪些部分”部分。
这是我被困住的“我该怎么办”和“我完成了什么”的细粒度元素,我知道这将是1:1和1:多种关系的混合为:
1:1关系:
- 创建人
- 删除者
许多:许多关系:
- 批准人
- 已批准
- 评论者
- 已审核
- CanEdit
- UpdatedBy
- CanDelete
- CanView
- AssignedToAccountableOwners
- AssignedToResponsibleOwners
- AssignedToProjectTeamMembers
根据我对EF Core的理解,这意味着我的Task实体需要一个类型为CreatedBy和DeletedBy的User属性,然后为多对多关系中的每一个提供11个ICollection<User>
集合。
用户实体还需要11个ICollection<User>
集合来作为hte关系的倒数部分。
我还需要11个中间表,这些表具有TaskId和UserId以及Task和User的属性来创建1:很多关系,然后同样在overrides OnModelCreating
方法中定义键,.HasOne
和用户中介表和任务表之间的.HasMany
关系。
总共需要12种实体类型(项目项目,例如风险,依赖性,约束,任务等),需要与用户之间的这些形式的关系,因此,这似乎是132种(12种实体类型与11种实体类型用户集合),用户表上的集合,132个中间表,132个DbSet表定义集,132个OnModelCrating关系定义集。
有更好的方法吗?还是只是大量复制,粘贴,查找和替换的情况?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)