写在前面

这篇我们对用户权限进行极简设计并保留其扩展性。首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core、ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解析并引入依赖注入的概念、Git的快速入门、Dapper的快速入门、Vue的快速入门。不知道大伙掌握的怎么样了!如果你有兴趣的话可以加入我们的.NET Core实战项目群637326624跟更多的小伙伴共同进行交流下。

接下来我们就正式进入.NET Core实战项目之CMS的设计篇了。在设计篇呢,我们需要对数据库进行设计,而数据库的设计又分为功能部分设计以及用户权限部分设计。作为设计篇的第一篇,我们先进行权限部分的设计吧!希望对你进行权限设计有所启发。

本篇已经收录至《.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

作者:依乐祝
原文地址:https://www.cnblogs.com/yilezhu/p/10056094.html

需求分析

首先,做一个东西之前必须把需求搞清楚。网上关于权限管理需求分析以及设计的文章也比较多,这里把我们需要实现的这个简单的CMS系统将要实现的权限部分内容罗列如下:

由于水平有限,有设计不合理的地方还请给予指正,我会以迅雷不及掩耳之势给以纠正,从而能够正确的引导更多的人。

  1. 权限资源

    • 菜单权限:管理员跟内容编辑者登录系统所拥有的功能菜单是不一样的(先实现这块)
    • 按钮权限:管理员有文章审核的功能,而内容编辑者没有(文章审核通过后才能进行发布,最近听群里小伙伴说权限控制如何控制到按钮,这个后期会考虑加上)
    • 数据权限:内容编辑者A看不到内容编辑者B发表的文章,而管理员可以看到A跟B的文章(这个后期也会考虑加上)
    • 字段权限:内容编辑者看不到文章的审批人是谁,而管理员能看到(这个后期也会考虑加上,而且脱离业务的字段权限,有点耍流氓的感觉)

      目前权限部分第一版只实现菜单权限部分,后期会扩展到按钮权限,数据权限以及字段权限!因为如果设计的太多的话对很多新手朋友可能很难消化,同时如果设计的太多的话反而增加系统的复杂性,影响后面课程的进度。

  2. 用户
    用户是应用系统的具体操作者,我这里设计的是不能把权限直接分配给用户,如果用户想拥有某个权限,必须先为这个用户创建一个角色,然后给这个角色分配相应的权限,从而间接的让用户拥有了系统的权限(说的有点拗口,大伙将就着看吧)。当然国内的情况是总有些人比较特殊,这时候可以专门为这个人创建一个特殊的角色来解决问题。

  3. 角色
    为了对许多拥有相似权限的用户进行分类管理,定义了角色的概念,以上所有的权限资源都可以分配给角色,然后通过给用户分配某个角色,从而达到给用户分分配目的(就是为了解耦资源权限和用户)角色和用户是N:N的关系。

设计

经过N次优化的数据库结构设计。本来数据库核心表中有很多多对多的关系(用户与角色/角色与菜单等),所以中间多了很多关联关系表,后来想想觉得何苦呢,为什么大伙都喜欢这样的设计,所以为了简化这个过程我进行了如下的设计:

这里你可能会问我:所有多对多的关系都放在一张表里面,怎么保证性能呢?什么?性能?没有千万级别的数据,别跟我谈性能。如果你的系统几十万数据时都会很卡的话,还是乖乖的去恶补一下数据库基础吧。

数据库设计我采用的是PowerDesigner,首先打开软件,新建一个概念模型。然后对这块的设计如下:

上图可能不清晰,所以下面我会对每个表进行详细的说明。

表详细说明

后台管理员

后台管理员顾名思义就是对我们的后台进行管理的人。这里考虑到后期扩展可能会用到会员系统(Users)因此这里的后台管理员表名使用Manager 。后台管理员包含的信息有:
主要信息:主键,角色ID,是否锁定
登录相关信息:用户名,密码
个性化信息:昵称,头像
联系方式信息:手机号码,邮箱地址
登录相关信息:登录次数,最后一次登录IP,最后一次登录时间
操作相关信息:添加人,添加时间,修改人,修改时间
其他信息:是否删除,备注

后台管理员角色

这里为了使后台管理员与后台菜单进行解耦引入了角色的概念。一个后台管理员想要具有某个菜单的功能必须给它分配相应角色才能可以,角色又分为系统管理员和超级管理员。超级管理员的角色不能进行修改,拥有后台的所有权限。而系统管理员的功能则可以进行个性化的定制来满足需求。

主要信息:主键,角色类型(超级管理员以及系统管理员),角色名称,是否系统默认(系统默认不能删除,防止误删除)
操作相关信息:添加人,添加时间,修改人,修改时间
其他 信息:是否删除,备注

后台管理菜单

后台管理菜单是后台的功能导航。是具体功能的单位,当然每个后台管理菜单还包含相应的操作权限,这块我们后期再做具体操作的设计,前期为了考虑大部分人所以这里暂不考虑,但是我已经预留了字段,聪明如你,应该猜得到这是哪个字段吧!
主要信息:主键,父菜单ID
个性化信息:名称,显示名称,图标地址,链接地址,排序字段,操作权限(没错,保留字段,为后期操作权限做准备)
操作信息:添加人,添加时间,修改人,修改时间
其他信息:是否删除

角色权限表

用来设计角色权限,由于目前只有菜单权限,后期可以在此表进行操作权限,以及其他权限的扩展:
主要信息:主键,角色ID,菜单ID
其他信息:操作类型

操作日志

顾名思义,就是对后台管理员的各种操作进行简要的记录
主要信息:主键,操作类型
操作信息:操作人,操作时间,操作IP,操作人名称
其他信息:备注

GitHub地址

这里我会把权限设计以及内容管理设计的逻辑视图上传到GayHub上,这里给出地址。觉得不错的,可以给个Star!后续我们也会在这个GayHub仓库进行开发的!

GitHub:https://github.com/yilezhu/Czar.Cms
码云:https://gitee.com/yilezhu/Czar.Cms

总结

今天带着大家进行用户权限模块的设计,通过再三的斟酌只保留了这五张表,所以保留下来的这五张表也都个个是精华。之前设计的时候想不通为什么那么热衷于那么多的多对多设计,这样的极简设计也别有一番风味,瞬间感觉整个世界都简单了很多。如果又觉得我的设计不合理的话,还请大家在下面留言或者加我联系我吧!写文章需要动力,希望大家给个推荐支持一下哈!

.NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程的更多相关文章

  1. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

  2. .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入

    作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9998021.html 写在前面 上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着 ...

  3. .NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练

    写在前面 上篇文章我带着大家通过分析了一遍ASP.NET Core的源码了解了它的启动过程,然后又带着大家熟悉了一遍配置文件的加载方式,最后引出了依赖注入以及控制反转的概念!如果大家把前面几张都理解了 ...

  4. .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

    写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...

  5. .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用

    写在前面 上面文章我给大家介绍了Dapper这个ORM框架的简单使用,大伙会用了嘛!本来今天这篇文章是要讲Vue的快速入门的,原因是想在后面的文章中使用Vue进行这个CMS系统的后台管理界面的实现.但 ...

  6. .NET Core实战项目之CMS 第十一章 开发篇-数据库生成及实体代码生成器开发

    上篇给大家从零开始搭建了一个我们的ASP.NET Core CMS系统的开发框架,具体为什么那样设计我也已经在第十篇文章中进行了说明.不过文章发布后很多人都说了这样的分层不是很合理,什么数据库实体应该 ...

  7. .NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程

    写在前面 上一篇文章中我带着大家进行了权限部分的极简设计,也仅仅是一个基本的权限设计.不过你完全可以基于这套权限系统设计你的更复杂的权限系统,当然更复杂的权限系统要根据你的业务来进行,因为任何脱离实际 ...

  8. .NET Core实战项目之CMS 第十七章 CMS网站系统的部署

    目前我们的.NET Core实战项目之CMS系列教程基本走到尾声了,通过这一系列的学习你应该能够轻松应对.NET Core的日常开发了!当然这个CMS系统的一些逻辑处理还需要优化,如没有引入日志组件以 ...

  9. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...

随机推荐

  1. 003 css总结

    1.题目 有哪项方式可以对一个DOM设置它的CSS样式? CSS都有哪些选择器? CSS选择器的优先级是怎么样定义的? CSS中可以通过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内? 超链 ...

  2. cross-env使用笔记

    1,cross-env能跨平台地设置及使用环境变量 cross-env让这一切变得简单,不同平台使用唯一指令,无需担心跨平台问题 npm安装方式 npm i --save-dev cross-env ...

  3. ISP PIPLINE (十五) AF

    主流的AF: CDAF, PDAF, laser assist AF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用). AF的大致原理就是检测图像锐度或者等价于锐度的参数,推动马达实现合焦或者对 ...

  4. VS 2013Ultimate 开发过程中遇到的问题——listbox的隐藏问题,combobox.textchanged的中文问题

    最近项目有需求,就是把一个combobox让它可以根据用户输入的汉字就行模糊查询出匹配的下拉框内容,很简单,是吧 但是!!!在开发中真是遇到了不少问题呢. 一.实现流程 1)我的实现思维是这样的,先把 ...

  5. Python+Tkinter 实现计算器功能

    #=================================================================================== import tkinter ...

  6. Flink解析kafka canal未压平数据为message报错

    canal使用非flatmessage方式获取mysql bin log日志发至kafka比直接发送json效率要高很多,数据发到kafka后需要实时解析为json,这里可以使用strom或者flin ...

  7. 第k小的元素

    利用快排思想,如果标志位大于k,则第k小的数字在左边,否则在右边.(程序是第k大的元素) #include <iostream> #include <vector> using ...

  8. mongodb4.0支持事务

    事务特性: 原子性:所有的改变都完成一致性:最终执行结果一致就行隔离性:一个事务的执行不能其它事务干扰.持久性:指一个事务一旦提交,数据不会改变,存在数据库中 exports.getSession = ...

  9. RSP小组——团队冲刺博客三

    RSP小组--团队冲刺博客三 冲刺日期:2018年12月12日 各成员今日(12.12)完成的任务 马瑞蕃页面布局 李闻洲音乐代码的实现 赵乾宸,找bug,处理bug,使游戏滑动,消除实现 蒋子行会议 ...

  10. 安装使用eclipse

    安装使用eclipse 目标 java学习需要,老师说要安装eclipse,,其实已经下了IDEA了,不过还是听老师的比较好( 准备 jre 也就是java运行环境,因为之前就下了jdk(里面包含jr ...