写在前面

这篇我们对用户权限进行极简设计并保留其扩展性。首先很感谢大家的阅读,前面六章我带着大家快速入门了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. 放球游戏B

    题目描述 校园里在上活动课,Red和Blue两位小朋友在玩一种游戏,他俩在一排N个格子里,自左到右地轮流放小球,每个格子只能放一个小球.第一个人只能放1个球,之后的人最多可以放前一个人的两倍数目的球, ...

  2. Linux中的官方源、镜像源汇总

    转载一篇文章,很有用 (一).企业站 搜狐: http://mirrors.sohu.com/ 网易: http://mirrors.163.com/ 阿里云: http://mirrors.aliy ...

  3. Emgucv使用中常用函数总结

    Emgucv常用函数总结: 读取图片 Mat SCr = new Mat(Form1.Path, Emgu.CV.CvEnum.LoadImageType.AnyColor); //根据路径创建指定的 ...

  4. Core Location实现定位

    2013/4/22记录: 注意:如非必要,不应该多次轮询位置信息i 使用时,可根据需要制定精度,通过仔细制定所需的绝对最低精度级别,可以纺织不必要的电池消耗.    导入:CoreLocation.f ...

  5. python之lambda函数

    今天复习python,看见一个关于lambda函数的例子,在python中使用lambda在某些时候十分方便,因为不必为了实现某些简单功能而新建一个函数.但是有这么一个lambda实例令我有些疑惑,现 ...

  6. tf.contrib.slim.data数据加载(1) reader

    reader: 适用于原始数据数据形式的Tensorflow Reader 在库中parallel_reader.py是与reader相关的,它使用多个reader并行处理来提高速度,但文件中定义的类 ...

  7. hadoop2-elasticsearch的安装

    本文主要讲elasticsearch-2.2.1的安装过程. 准备工作: 1.搭建虚拟机 你需要先参考 hadoop2集群环境搭建 把你的虚拟机搭建起来-hadoop环境可以先不用搭建(完成步骤1到步 ...

  8. redis + cookies 实现持久登入

    通过登入把用户信息和token加载到redis中去, 将token和部分用户信息存储在cookie中, 下次登入时 判断cookie的token在redis中是否存在, 存在就把用户信息加载出来自动登 ...

  9. Dapper 封装oracle底层访问数据库

    如下代码,修改成只支持oracle: using System; using System.Collections.Generic; using System.Data; using System.L ...

  10. C语言表达式和语句

    一.表达式 在C语言中,常量.变量.函数调用以及按C语言语法规则用运算符把运算数连接起来的式子都是合法的表达式 . 最后一类可以理解为运算符和运算对象的组合.例如: 算术表达式 = 算术运算符 + 运 ...