这篇咱们对用户权限进行极简设计并保留其扩展性。首先很感谢你们的阅读,前面六章我带着你们快速入门了ASP.NET Core、ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解析并引入依赖注入的概念、Git的快速入门、Dapper的快速入门、Vue的快速入门。不知道大伙掌握的怎么样了!若是你有兴趣的话能够加入咱们的.NET Core实战项目群637326624跟更多的小伙伴共同进行交流下。html
接下来咱们就正式进入.NET Core实战项目之CMS的设计篇了。在设计篇呢,咱们须要对数据库进行设计,而数据库的设计又分为功能部分设计以及用户权限部分设计。做为设计篇的第一篇,咱们先进行权限部分的设计吧!但愿对你进行权限设计有所启发。git
本篇已经收录至《.NET Core实战项目之CMS 第一章 入门篇-开篇及整体规划》github
做者:依乐祝
原文地址:http://www.javashuo.com/article/p-aapozkkk-dn.html数据库
首先,作一个东西以前必须把需求搞清楚。网上关于权限管理需求分析以及设计的文章也比较多,这里把咱们须要实现的这个简单的CMS系统将要实现的权限部份内容罗列以下:app
因为水平有限,有设计不合理的地方还请给予指正,我会以迅雷不及掩耳之势给以纠正,从而可以正确的引导更多的人。数据库设计
字段权限:内容编辑者看不到文章的审批人是谁,而管理员能看到(这个后期也会考虑加上,并且脱离业务的字段权限,有点耍流氓的感受)性能
目前权限部分初版只实现菜单权限部分,后期会扩展到按钮权限,数据权限以及字段权限!由于若是设计的太多的话对不少新手朋友可能很难消化,同时若是设计的太多的话反而增长系统的复杂性,影响后面课程的进度。优化
用户
用户是应用系统的具体操做者,我这里设计的是不能把权限直接分配给用户,若是用户想拥有某个权限,必须先为这个用户建立一个角色,而后给这个角色分配相应的权限,从而间接的让用户拥有了系统的权限(说的有点拗口,大伙将就着看吧)。固然国内的状况是总有些人比较特殊,这时候能够专门为这我的建立一个特殊的角色来解决问题。设计
角色
为了对许多拥有类似权限的用户进行分类管理,定义了角色的概念,以上全部的权限资源均可以分配给角色,而后经过给用户分配某个角色,从而达到给用户分分配目的(就是为了解耦资源权限和用户)角色和用户是N:N的关系。3d
通过N次优化的数据库结构设计。原本数据库核心表中有不少多对多的关系(用户与角色/角色与菜单等),因此中间多了不少关联关系表,后来想一想以为何苦呢,为何大伙都喜欢这样的设计,因此为了简化这个过程我进行了以下的设计:
这里你可能会问我:全部多对多的关系都放在一张表里面,怎么保证性能呢?什么?性能?没有千万级别的数据,别跟我谈性能。若是你的系统几十万数据时都会很卡的话,仍是乖乖的去恶补一下数据库基础吧。
数据库设计我采用的是PowerDesigner
,首先打开软件,新建一个概念模型。而后对这块的设计以下:
上图可能不清晰,因此下面我会对每一个表进行详细的说明。
后台管理员顾名思义就是对咱们的后台进行管理的人。这里考虑到后期扩展可能会用到会员系统(Users)所以这里的后台管理员表名使用Manager 。后台管理员包含的信息有:
主要信息:主键,角色ID,是否锁定
登陆相关信息:用户名,密码
个性化信息:昵称,头像
联系方式信息:手机号码,邮箱地址
登陆相关信息:登陆次数,最后一次登陆IP,最后一次登陆时间
操做相关信息:添加人,添加时间,修改人,修改时间
其余信息:是否删除,备注
这里为了使后台管理员与后台菜单进行解耦引入了角色的概念。一个后台管理员想要具备某个菜单的功能必须给它分配相应角色才能能够,角色又分为系统管理员和超级管理员。超级管理员的角色不能进行修改,拥有后台的全部权限。而系统管理员的功能则能够进行个性化的定制来知足需求。
主要信息:主键,角色类型(超级管理员以及系统管理员),角色名称,是否系统默认(系统默认不能删除,防止误删除)
操做相关信息:添加人,添加时间,修改人,修改时间
其余 信息:是否删除,备注
后台管理菜单是后台的功能导航。是具体功能的单位,固然每一个后台管理菜单还包含相应的操做权限,这块咱们后期再作具体操做的设计,前期为了考虑大部分人因此这里暂不考虑,可是我已经预留了字段,聪明如你,应该猜获得这是哪一个字段吧!
主要信息:主键,父菜单ID
个性化信息:名称,显示名称,图标地址,连接地址,排序字段,操做权限(没错,保留字段,为后期操做权限作准备)
操做信息:添加人,添加时间,修改人,修改时间
其余信息:是否删除
用来设计角色权限,因为目前只有菜单权限,后期能够在此表进行操做权限,以及其余权限的扩展:
主要信息:主键,角色ID,菜单ID
其余信息:操做类型
顾名思义,就是对后台管理员的各类操做进行简要的记录
主要信息:主键,操做类型
操做信息:操做人,操做时间,操做IP,操做人名称
其余信息:备注
这里我会把权限设计以及内容管理设计的逻辑视图上传到GayHub上,这里给出地址。以为不错的,能够给个Star!后续咱们也会在这个GayHub仓库进行开发的!
GitHub:https://github.com/yilezhu/Czar.Cms
码云:https://gitee.com/yilezhu/Czar.Cms
今天带着你们进行用户权限模块的设计,经过再三的斟酌只保留了这五张表,因此保留下来的这五张表也都个个是精华。以前设计的时候想不通为何那么热衷于那么多的多对多设计,这样的极简设计也别有一番风味,瞬间感受整个世界都简单了不少。若是又以为个人设计不合理的话,还请你们在下面留言或者加我联系我吧!写文章须要动力,但愿你们给个推荐支持一下哈!