写在前面

本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过。如果您有发现错误,请告知我,我会第一时间修改。
前期我不会公开源码,我想是一点点敲代码,不然复制粘贴那就没意思了。而且很多代码(比如Identity Server4)网上也有很多类似的教程及成熟的框架。这里只是想,知其然,知其所以然,并非重复的造轮子。因为这段时间我发现,自己闷很久写出来的代码,再去看看别人的,会有种恍然大悟的感觉。不是只会用,不知道为什么要这样用。
真的,只看不敲,总是学不会。

Demo地址:http://app.guoddy.com
数据并不会真实保存,设定的为测试模式,所以免登录。

本系列文章是计划做一个通用权限处理系统,可以在此基础上去做拓展性开发其实本计划是继续增加流程管理和及时通讯的,em...这个后续慢慢增加,流程表单及设计还没研究透

记录内容

总述
1.项目的搭建
2.数据库设计(权限模块)
3.EF的使用
4.业务代码的实现
5.依赖注入
6.权限验证
7.做个登录验证

数据库设计(权限模块)

我先说下我参考的资料,后续是在自己理解的基础上做些修改。
原文是参考应用程序权限设计

需求

需求不同,权限的控制粒度就不同。通常情况下分为三种情况

1.控制当前登录用户能够看到的菜单。
2.控制当前登录用户能够看到的菜单,还要控制菜单下的操作按钮。
3.数据和数据列权限:数据权限指普通用户只能看到自己发表的内容,而领导可以看到部门下所有用户发表的内容;数据列权限指比如金融系统 ,只有某种领导,才能看到用户的存款余额,而普通员工是无权限查看的。

我们要实现的是控制到按钮的粒度。

权限设计&Why

我这里主要涉及七个表,四个数据表,三个关联表。
为什么这样设计,我觉得可能这是大多数系统的需求。
1.用户和角色多对多,一个用户可以拥有多个角色,不然设计角色就没有了意义,实际可能一个人身兼数职。
2.可以直接给用户授予或取消授予某个权限。这个可能会有人觉得没必要,所以如果不涉及这个,那就是五个表。但是我这里保留,因为很多情况下,这是很正常的需求。
3.菜单可以无限级别,根据实际需求,修改系统配置参数。

详细说明

ObjectIDRemarkStatusCreatedByCreatedTimeModifiedByModifiedTimeSort是默认字段。

SysUserInfo用户表
  • 如果用户数据量大的话,实际这个表只需要保留ObjectIDULoginNameULoginPWD就可以了,这样可以提高速度,没必要把所有信息都保存起来。
  • 用户和角色多对多 R_sysUserInfo_sysRole
  • 用户和权限项多对多(直接授权或禁止) R_UserPermissions
Name 说明 类型 主键
ObjectID 主键 nvarchar(50) TRUE
ULoginName 用户名 nvarchar(20)
ULoginPWD 密码 nvarchar(50)
URealName 真实姓名 nvarchar(10)
UTelphone 电话 nvarchar(20)
UMobile 手机号 nvarchar(11)
UEmail Email nvarchar(50)
UQQ QQ nvarchar(20)
UGender 性别:0-女;1-男;2-保密 int
UDepID 所属部门 nvarchar(50)
Remark 备注 nvarchar(500)
Status 状态:0-启用;1-禁用 int
CreatedBy 创建人 nvarchar(50)
CreatedTime 创建时间 datetime
ModifiedBy 修改人 nvarchar(50)
ModifiedTime 修改时间 datetime
Sort 排序值 int
SysRole角色表
  • 对角色的分类,比如管理员、普通用户等。
  • 角色用户多对多 R_sysUserInfo_sysRole
  • 角色权限多对多 R_RolePermission
Name 说明 类型 主键
ObjectID 主键 nvarchar(50) TRUE
RName 角色名称 varchar(50)
Remark 备注 nvarchar(500)
Status 状态:0-启用;1-禁用 int
CreatedBy 创建人 nvarchar(50)
CreatedTime 创建时间 datetime
ModifiedBy 修改人 nvarchar(50)
ModifiedTime 修改时间 datetime
Sort 排序值 int
SysMenus菜单表
  • 菜单表 是一开始设计好后,改动最多的一个表。后续在开发过程中增加了IsLastHierarchy;去除了MAction
  • IsLast用来标记是不是最后一级,如果是最后一级我们给自动增加增删改等默认方法。
  • Hierarchy用来标记层级,前面我们说可以做到无限极,但是通常情况下会是三级,所以这个需要根据实际设定系统参数,维护的时候检查限制即可。
  • IsMenuShow是否作为菜单显示,也就是左侧菜单递归的,因为有部分API不需要作为菜单显示,并且授权的方式也会不一样。
  • 菜单角色多对多 R_RolePermission
  • 菜单权限项一对多
Name 说明 类型 主键
ObjectID 主键 nvarchar(50) TRUE
MName 名称 nvarchar(100)
MUrl URL nvarchar(100)
MArea 区域 nvarchar(100)
MController 控制器 nvarchar(100)
MIcon 图标 nvarchar(100)
IsLast 是不是最后一级菜单:0-是;1-否 int
IsMenuShow 是不是作为菜单显示:0-是;1-否 int
Remark 备注 nvarchar(500)
ParentID 父ID nvarchar(50)
Status 状态:0-启用;1-禁用 int
Hierarchy 层级 int
CreatedBy 创建人 nvarchar(50)
CreatedTime 创建时间 datetime
ModifiedBy 修改人 nvarchar(50)
ModifiedTime 修改时间 datetime
Sort 排序值 int
SysFunction 菜单按钮表 (菜单权限项表)
  • SysFunction一开始我是叫菜单按钮表的,我计划是查询、新增编辑删除、其他权限这样控制,但后来发现这样不好,所以全都分开,每个方法都要记录。当然为了方便,通用的方法,在增加菜单的时候会自动添加上。
  • 菜单权限项菜单是多对一关系
Name 说明 类型 主键
ObjectID 主键 nvarchar(50) TRUE
FName 名称 nvarchar(50)
FFunction 方法 nvarchar(50)
FIcon 图标 nvarchar(50)
ParentID 所属菜单 nvarchar(50)
Remark 备注 nvarchar(500)
Status 状态:0-启用;1-禁用 int
CreatedBy 创建人 nvarchar(50)
CreatedTime 创建时间 datetime
ModifiedBy 修改人 nvarchar(50)
ModifiedTime 修改时间 datetime
Sort 排序值 int
R_sysUserInfo_sysRole用户和角色关联表,记录用户和角色的对应关系。
R_RolePermission 角色菜单权限项关联表。

比如一个角色有用某菜单下的查询和删除权限,那么这个表应该是具有两条记录的。

R_UserPermissions 用户菜单权限项关联表。

HavePermission记录该用户是 是否有权限:0-无权限;1-有权限
后续处理的时候,要从获取的权限记录中排除直接无权限的记录,增加有权限的。

总结

其实网上很多关于权限的文章,之前自己再看的时候,总是觉得迷迷糊糊,所以最后打算自己动手做。到做完的时候,才有所理解。我也不知道我这里叙述的是不是不清楚或者设计的是否合理,如果您觉得有问题,请告知我,我会立即改正!
切勿眼高手低,动手敲,像Power Design我也是第一次用,也是第一次用MarkDown写博客。
【如果帮助到你了,俺想要个推荐,嘻嘻】

基于ASP.Net Core开发一套通用后台框架记录-(数据库设计(权限模块))的更多相关文章

  1. 基于ASP.Net Core开发一套通用后台框架记录-(项目的搭建)

    写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...

  2. 基于ASP.Net Core开发一套通用后台框架记录-(总述)

    写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...

  3. 基于ASP.Net Core开发的一套通用后台框架

    基于ASP.Net Core开发一套通用后台框架 写在前面 这是本人在学习的过程中搭建学习的框架,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 知其然,知其所以然,并非重 ...

  4. 基于Asp.Net Core 5.0依赖Quartz.Net框架编写的任务调度web管理平台

    源码地址: https://github.com/246850/Calamus.TaskScheduler 演示地址:http://47.101.47.193:1063/ 1.Quartz.NET框架 ...

  5. 基于ASP.NET core的MVC站点开发笔记 0x01

    基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...

  6. 基于Citus和ASP.NET Core开发多租户应用

    Citus是基于PsotgreSQL的扩展,用于切分PsotgreSQL的数据,非常简单地实现数据“切片(sharp)”.如果不使用Citus,则需要开发者自己实现分布式数据访问层(DDAL),实现路 ...

  7. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)

    最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...

  8. 基于ASP.NET Core 6.0的整洁架构

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本节将介绍基于ASP.NET Core的整洁架构的设计理念,同时基于理论落地的代码 ...

  9. dot watch+vs code提成asp.net core开发效率

    在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp.net core 2.0的今天,部分用法已经不太一样,所以就再写一篇文 ...

随机推荐

  1. [HDU2136] Largest prime factor(素数筛)

    传送门 题意 给出若干个数n(n<=1000000),求每个n的最大质因子的排名. 质数的排名:如果素数p是第k小的素数,那么p的排名就是k. 思路 乍一看不知道怎么搞. 其实可以想想我们怎么筛 ...

  2. 选学霸(codevs 3372)

    题目描述 Description 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一部分没有,同学们就会抗议.所以老师想请你帮他求出他该选多少学霸,才能既不让同 ...

  3. 修改xampp的mysql默认密码

    MySQL 的“root”用户默认状态是没有密码的,所以在 PHP 中您可以使用 mysql_connect("localhost","root"," ...

  4. HDU.P1100 Trees Made to Order 解题报告

    http://www.cnblogs.com/keam37/p/3637717.html  keam所有 转载请注明出处 Problem Description We can number binar ...

  5. 洛谷 P1122 最大子树和

    P1122 最大子树和 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的 ...

  6. Redis Cluster集群搭建后,客户端的连接研究(Spring/Jedis)(待实践)

    说明:无论是否已经搭建好集群,还是使用什么样的客户端去连接,都是必须把全部IP列表集成进去,然后随机往其中一个IP写. 这样做的好处: 1.随机IP写入之后,Redis Cluster代理层会自动根据 ...

  7. 在HTML中显示图片时希望如果图片不存在或者无法显示时,能够显示默认图片

    很多时候,在HTML中显示图片时希望如果图片不存在或者无法显示时,能够显示默认图片.可以通过以下方式: <img src="xxx.jpg" onError="th ...

  8. uva 1411 Ants (权值和最小的完美匹配---KM算法)

    uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louse ...

  9. 【结果发布】第六届SeedCoder编程大赛初赛结果发布

    微软俱乐部科技文化月seedcoder2014编程大赛已经初审完成. 评审小组选出最棒的作品进入决赛(现场答辩+陈述环节,由评委现场打分).终于排名由"初赛分数+现场答辩分"决定. ...

  10. linux内核CFS进程调度策略

    一.概述 首先简介一下主要的设计思路, CFS思路非常easy.就是依据各个进程的权重分配执行时间(权重怎么来的后面再说). 进程的执行时间计算公式为: 分配给进程的执行时间 = 调度周期 * 进程权 ...