最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容记录下来,同时也分享给大家,希望正在研究ABP源码的朋友有一定帮助。

  上篇介绍ABP的多语言,本篇主要介绍权限的数据库设计,用EntityFramework已经有段时间了,基于ABP这样的设计还是第一次看到,具体应用场景1:N,ABP权限设计,菜单的权限可以分配置给角色,也可以直接分配给用户。

  另一个应用场景也可以是订单系统:客户可以通过订单查询到客户的所有订单明细,订单明细与客户没有关系,如果想直接查看客户的订单明细,也可以通过这种方式进行设计,具体设计方法如下

  DbContext 设计类(分离出来的Demo)

  

public class Test : DbContext
{
//您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
//使用“Test”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
//“Study.EF.Test”数据库。
//
//如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“Test”
//连接字符串。
public Test()
: base("name=Test")
{
} //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First 模型
//的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109。 public virtual DbSet<Permission> Permission { get; set; } public virtual DbSet<UserPermission> UserPermission { get; set; } public virtual DbSet<RolePermission> RolePermission { get; set; } public virtual DbSet<User> User { get; set; } public virtual DbSet<Role> Role { get; set; }
} public class Permission
{
public int Id { get; set; }
public string Name { get; set; }
} public class UserPermission : Permission
{
public int UserId { get; set; } //基于用户的权限
} public class RolePermission : Permission
{
public int RoleId { get; set; } //基于角色的权限
} public class User
{

public User()
{
Permissions = new HashSet<UserPermission>();
}

public int Id { get; set; }
public string Name { get; set; }
[ForeignKey("UserId")]
public virtual ICollection<UserPermission> Permissions { get; set; } //基于用户的权限列表
} public class Role
{

public Role()
{
Permissions = new HashSet<RolePermission>();
}

public int Id { get; set; }
public string Name { get; set; }
[ForeignKey("RoleId")]
public virtual ICollection<RolePermission> Permissions { get; set; } //基于角色的权限列表
}

生成的数据库是3张表,并不是5张表,如下图

EF 添加数据方法:

using (var text = new Test())
{
var u = new User();
u.Name = "test";
var up = new UserPermission();
up.Name = "UserPermission";
u.Permissions.Add(up); //添加用户权限
text.User.Add(u); var role = new Role();
role.Name = "RoleTest";
var rp = new RolePermission();
rp.Name = "RolePermission";
role.Permissions.Add(rp); //添加角色权限
text.Role.Add(role); text.SaveChanges();
}

执行结果,字段 Discriminator 是EF自己生成的字段,用来区别数据来源

ABP 初探 之User、Role、Permission数据库设计 (EntityFramework 继承的另一种使用方法)的更多相关文章

  1. User、Role、Permission数据库设计ABP

    ABP 初探 之User.Role.Permission数据库设计 (EntityFramework 继承的另一种使用方法) 最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容 ...

  2. API设计中性能提升的10种解决方法

    api的设计涉及到的方面很多, 分类是一个基本的思考方式.如果可以形成一个系列性的文字,那就从性能开始吧. 就像任何性能一样,API 性能主要取决于如何响应不同类型的请求.例如:典型的电商场景,显示用 ...

  3. ABP 初探 之 权限设计

    大.小项目都要设计权限,都想设计一个通用的权限,把权限做的比较复杂,现在了解了ABP的设计思路,觉得设计很简单,但实现方法与思路耐人寻味. 本篇只介绍AbpPermissions的数据库设计,其它表结 ...

  4. 数据库设计(1/9):数据元(Data Elements)

    对于设计和创建数据库完全是个新手?没关系,Joe Celko,世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多年 ...

  5. ylbtech-QQ(腾讯)-群空间-数据库设计

    ylbtech-DatabaseDesgin:ylbtech-QQ(腾讯)-群空间-数据库设计 DatabaseName:QQ-群空间 Model:群相册.群共享.群论坛.群成员.留言板.公告.6个模 ...

  6. rbac数据库设计

    1 rbac数据库设计 RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制分享牛原创,分享牛系列,分享牛.rbac 用户角色权限资源表如 ...

  7. spring security4.2.2的maven配置+spring-security配置详解+java源码+数据库设计

    最近项目需要添加权限拦截,经讨论决定采用spring security4.2.2!废话少说直接上干货! 若有不正之处,请谅解和批评指正,不胜感激!!!!! spring security 4.2.2文 ...

  8. Vue/Egg大型项目开发(二)数据库设计

    项目Github地址:前端(https://github.com/14glwu/stuer)后端(https://github.com/14glwu/stuer-server) 项目线上预览:http ...

  9. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二):数据库设计

    数据库设计 系统主要包含用户(sys_user).组织(sys_dept).角色(sys_role).菜单(sys_menu).角色组织(sys_role_dept).角色菜单(sys_role_me ...

随机推荐

  1. Android开发学习之路-Android N新特性-多窗口模式

    我们都知道,在最新的Android N系统中,加入了一个新的功能,就是多窗口模式.多窗口模式允许我们在屏幕上显示两个窗口,每个窗口显示的内容不同,也就是说,我们可以一遍看电视剧,一边聊微信. 这里我们 ...

  2. iOS-屏幕适配-UI布局

    iOS 屏幕适配:autoResizing autoLayout和sizeClass 一.图片解说 -------------------------------------------------- ...

  3. test markdown

    Markdown和Haroopad介绍文档 [TOC "float:right"] 什么是Markdown Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John ...

  4. EF-DbUpdateException--实体类和数据库列不对应的解决方案

    错误信息 1.VS实体类里面的字段 2数据库里面的字段 猜测是因为字段数不匹配导致的 3删除多余字段 5.结果 错误信息贴上: -------------------------Log_Header- ...

  5. C#设计模式系列:迭代器模式(Iterator)

    迭代器模式把对象的职责分离,职责分离可以最大限度减少彼此之间的耦合程度,从而建立一个松耦合的对象.职责分离的要点是对被分离的职责进行封装,并以抽象的方式建立彼此之间的关系. 1.迭代器模式简介 1.1 ...

  6. Android,App 常用图标尺寸规范

    程序启动图标(Logo): 小屏ldpi() 36 x 36 px. 中屏mdpi(160dpi):48*48px 大屏hdpi(240dpi):72*72px 特大屏xhdpi(320dpi):96 ...

  7. 平衡二叉树AVL删除

    平衡二叉树的插入过程:http://www.cnblogs.com/hujunzheng/p/4665451.html 对于二叉平衡树的删除采用的是二叉排序树删除的思路: 假设被删结点是*p,其双亲是 ...

  8. tn文本分析语言(四) 实现自然语言计算器

    tn是desert和tan共同开发的一种用于匹配,转写和抽取文本的语言.解释器使用Python实现,代码不超过1000行. github地址:https://github.com/ferventdes ...

  9. GoldenGate碎碎念

    1. 在启动mgr进程的过程中报如下错误 GGSCI (node1.being.com) > start mgr Cannot - No such file or directory Canno ...

  10. golang中的类和接口的使用

    类使用:实现一个people中有一个sayhi的方法调用功能,代码如下: type People struct { //.. } func (p *People) SayHi() { fmt.Prin ...