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自己生成的字段,用来区别数据来源

时间: 2024-08-13 15:28:14

User、Role、Permission数据库设计ABP的相关文章

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

最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容记录下来,同时也分享给大家,希望正在研究ABP源码的朋友有一定帮助. 上篇介绍ABP的多语言,本篇主要介绍权限的数据库设计,用EntityFramework已经有段时间了,基于ABP这样的设计还是第一次看到,具体应用场景1:N,ABP权限设计,菜单的权限可以分配置给角色,也可以直接分配给用户. 另一个应用场景也可以是订单系统:客户可以通过订单查询到客户的所有订单明细,订单明细与客户没有关系,如果想直接查看客户的订单明细,也

第一篇:无角牛MVC通用后台数据库设计

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {

PHP和MySQL Web开发从新手到高手,第3天-数据库设计

这些表在以后会用到. 1. 数据库设计   包含如下6个表:   2. 每个表的结构 2.1 表`author` CREATE TABLE `author` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `password` char(32) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=

web权限数据库设计

CREATE TABLE account ( accid INT DEFAULT '0' NOT NULL, accCode CHAR(20), accName VARCHAR(30), PRIMARY KEY (accid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE role ( roleid INT DEFAULT '0' NOT NULL, roleCode CHAR(20), roleName VARCHAR(30), PRIM

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

最近项目需要添加权限拦截,经讨论决定采用spring security4.2.2!废话少说直接上干货! 若有不正之处,请谅解和批评指正,不胜感激!!!!! spring security 4.2.2文档:http://docs.spring.io/spring-security/site/docs/4.2.2.RELEASE/reference/htmlsingle/#el-access-web spring security 3 中文2文档:http://www.mossle.com/docs

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

对于设计和创建数据库完全是个新手?没关系,Joe Celko,世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多年来最受读者喜爱的作者.他在美国.英国,北欧,南美及非洲传授SQL知识.他在ANSI / ISO SQL标准委员会工作了10年,为SQL-89和SQL-92标准做出了杰出贡献. 在你开始考虑你的数据库架构或表前,你需要细想下你的数据:数据是什么类型,你使用值的范围.它应该是唯一的,精确的且不含糊的.然

[数据库设计]用户和角色:通用权限管理系统数据库表结构如何设计?

一,前言 权限管理系统的应用者应该有三种不同性质上的使用, A,使用权限 B,分配权限 C,授权权限  本文只从<使用权限>和<分配权限>这两种应用层面分析,暂时不考虑<授权权限>这种. 二,初步分析用户和角色 说到权限管理,首先应该想到,当然要设计一个用户表,一个权限表.这样就决定了一个人有什么样的权限. 做着做着就会发现这样设计太过繁琐,如果公司里面所有员工都有这样的权限呢,每一个人都要配置?那是一件很痛苦的事情.因此再添加一个角色表,把某些人归为一类,然后再把权限

逻辑数据库设计 - 无视约束(谈外键)

有一些开发人员不推荐使用完整性约束,你可能听过以下这么几点不使用外键的原因. 1.数据更新有可能和约束冲突. 2.当前的数据库设计如此灵活,以致于不支持引用完整性约束. 3.数据库为外键建立的索引会影响性能. 4.当前使用的数据库不支持外键. 5.定义外键的语法并不简单,还需要查阅. 一.反模式:无视约束 即使第一感觉告诉你,省略外键约束能使得数据库设计更加简单.灵活,或者执行更加高效,你还是不得不在其他方面付出相应的代价 -- 必须增加额外的代码来手动维护引用完整性. 1.完整性问题 很多人对

在线笔试系统 数据库设计

试卷模板:papertemaplate 岗位类型:positiontype 题库:question 答卷:sheet 应聘者答案(答卷明细表):ansersheet 用户表(包含面试吗.HR.应聘者):user 角色表:role (用来区分用户的类型) 试卷模板和题库的关系(试卷明细表): paperdetails 应聘者和岗位的关系:userpositiondertails 用户表(用户表包含3个角色)user 列名 含义 类型 属性 id 记录编号 INT 自增.主键.非空 loginnam