User、Role、Permission数据库设计ABP
ABP 初探 之User、Role、Permission数据库设计 (EntityFramework 继承的另一种使用方法)
最近群里(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自己生成的字段,用来区别数据来源

User、Role、Permission数据库设计ABP的更多相关文章
- ABP 初探 之User、Role、Permission数据库设计 (EntityFramework 继承的另一种使用方法)
最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容记录下来,同时也分享给大家,希望正在研究ABP源码的朋友有一定帮助. 上篇介绍ABP的多语言,本篇主要介绍权限的数据库设计,用 ...
- 数据库设计(1/9):数据元(Data Elements)
对于设计和创建数据库完全是个新手?没关系,Joe Celko,世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多年 ...
- ylbtech-QQ(腾讯)-群空间-数据库设计
ylbtech-DatabaseDesgin:ylbtech-QQ(腾讯)-群空间-数据库设计 DatabaseName:QQ-群空间 Model:群相册.群共享.群论坛.群成员.留言板.公告.6个模 ...
- rbac数据库设计
1 rbac数据库设计 RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制分享牛原创,分享牛系列,分享牛.rbac 用户角色权限资源表如 ...
- spring security4.2.2的maven配置+spring-security配置详解+java源码+数据库设计
最近项目需要添加权限拦截,经讨论决定采用spring security4.2.2!废话少说直接上干货! 若有不正之处,请谅解和批评指正,不胜感激!!!!! spring security 4.2.2文 ...
- Vue/Egg大型项目开发(二)数据库设计
项目Github地址:前端(https://github.com/14glwu/stuer)后端(https://github.com/14glwu/stuer-server) 项目线上预览:http ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二):数据库设计
数据库设计 系统主要包含用户(sys_user).组织(sys_dept).角色(sys_role).菜单(sys_menu).角色组织(sys_role_dept).角色菜单(sys_role_me ...
- JavaWeb项目学习教程(2) 系统数据库设计
最开始本来想写一个管理系统,因为考虑到期末来临,我女朋友就可以看着教程然后学一些东西,然后可以自己慢慢手敲代码.但无奈自己也太懒,两个月过后,我才开始继续写这个博客,而现在我都已经开学了.不过博客还是 ...
- 数据库设计_ERMaster安装使用_PowerDesigner数据设计工具
数据库设计 1. 说在前面 项目开发的流程包括哪些环节 需求调研[需求调研报告]-- 公司决策层 (1) 根据市场公司需求分析公司是否需要开发软件来辅助日常工作 (2) 公司高层市场考察,市场分析,决 ...
随机推荐
- [转载]使用python上传图片到 yeelink
#/bin/env python # -*-coding:utf=8 -*- import os,time,subprocess,shlex import urllib2 def upload_yee ...
- Java中动态代理技术生成的类与原始类的区别
用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...
- Swing之JTable的详细介绍(转)
表格(Table)的使用与介绍8-1:使用JTable组件:类层次结构图:java.lang.Object--java.awt.Component--java.awt.Container--javax ...
- 基于struct2完整的用户登录
第一lib在导入struct2相应jar包 在web.xml组态struct2过滤器 <filter> <filter-name>struts2</filter-name ...
- 无奈而又苦逼的二分版本号回退法定位新引入的bug!!!
昨天測试人员和开发者都发现, 某新版本号有严重的bug. 群里已经開始嚷嚷了, 但没有谁知道是谁引入的问题.本来呢, 这个问题不应该是由我去定位, 但主管让我帮定位一下, 毕竟时间太紧急, 必须尽快 ...
- iphone内容开发技术学习
一.iOS基础 1 开发环境搭建以及IOS组件.框架的概要介绍. 2 mac操作系统与iOS操作系统 3 xcode IDE开发环境的初始 二.C语言基础 1数据类型.表达式与控制流程语句 2数组.函 ...
- dlmalloc 2.8.6 源代码具体解释(6)
本文章由vector03原创, 转载请注明出处. 邮箱地址: mmzsmm@163.com, 欢迎来信讨论. 3.4 sys_alloc sys_alloc是dlmalloc中向系统获取内存的主要接口 ...
- 一个可以跑的Hadoop的WordCount程序
搭个新环境时总要折腾一下,于是干脆记下来. 程序: package com.my; import java.io.IOException; import java.util.Iterator; imp ...
- Ubuntu 下一个disk清理保护
有很长一段时间ubuntu人,很多人会突然提示:磁盘空间不足1G. 然后很长一段时间分析..最近遇到的类别似问题.记录,如下面: 一个:.xsession-errors.old 能够在终端看到主用户文 ...
- StackExchange.Redis 使用-发布订阅 (二)
使用Redis的发布订阅功能 redis另一个常见的用途是发布订阅功能 . 它非常的简单 ,当连接失败时 ConnectionMultiplexer 会自动重新进行订阅 . ISubscriber s ...