基于ASP.Net Core开发一套通用后台框架记录-(数据库设计(权限模块))
写在前面
本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过。如果您有发现错误,请告知我,我会第一时间修改。
前期我不会公开源码,我想是一点点敲代码,不然复制、粘贴那就没意思了。而且很多代码(比如Identity Server4)网上也有很多类似的教程及成熟的框架。这里只是想,知其然,知其所以然,并非重复的造轮子。因为这段时间我发现,自己闷很久写出来的代码,再去看看别人的,会有种恍然大悟的感觉。不是只会用,不知道为什么要这样用。
真的,只看不敲,总是学不会。
Demo地址:http://app.guoddy.com
数据并不会真实保存,设定的为测试模式,所以免登录。
本系列文章是计划做一个通用权限处理系统,可以在此基础上去做拓展性开发其实本计划是继续增加流程管理和及时通讯的,em...这个后续慢慢增加,流程表单及设计还没研究透。
记录内容
总述
1.项目的搭建
2.数据库设计(权限模块)
3.EF的使用
4.业务代码的实现
5.依赖注入
6.权限验证
7.做个登录验证
数据库设计(权限模块)
我先说下我参考的资料,后续是在自己理解的基础上做些修改。
原文是参考应用程序权限设计
需求
需求不同,权限的控制粒度就不同。通常情况下分为三种情况
1.控制当前登录用户能够看到的菜单。
2.控制当前登录用户能够看到的菜单,还要控制菜单下的操作按钮。
3.数据和数据列权限:数据权限指普通用户只能看到自己发表的内容,而领导可以看到部门下所有用户发表的内容;数据列权限指比如金融系统 ,只有某种领导,才能看到用户的存款余额,而普通员工是无权限查看的。
我们要实现的是控制到按钮的粒度。
权限设计&Why

我这里主要涉及七个表,四个数据表,三个关联表。
为什么这样设计,我觉得可能这是大多数系统的需求。
1.用户和角色多对多,一个用户可以拥有多个角色,不然设计角色就没有了意义,实际可能一个人身兼数职。
2.可以直接给用户授予或取消授予某个权限。这个可能会有人觉得没必要,所以如果不涉及这个,那就是五个表。但是我这里保留,因为很多情况下,这是很正常的需求。
3.菜单可以无限级别,根据实际需求,修改系统配置参数。
详细说明
ObjectID、Remark、Status、CreatedBy、CreatedTime、ModifiedBy、ModifiedTime、Sort是默认字段。
SysUserInfo用户表
- 如果用户数据量大的话,实际这个表只需要保留
ObjectID、ULoginName、ULoginPWD就可以了,这样可以提高速度,没必要把所有信息都保存起来。- 用户和角色多对多 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 | nvarchar(50) | ||
| UQQ | 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菜单表
- 菜单表 是一开始设计好后,改动最多的一个表。后续在开发过程中增加了
IsLast、Hierarchy;去除了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开发一套通用后台框架记录-(数据库设计(权限模块))的更多相关文章
- 基于ASP.Net Core开发一套通用后台框架记录-(项目的搭建)
写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...
- 基于ASP.Net Core开发一套通用后台框架记录-(总述)
写在前面 本系列博客是本人在学习的过程中搭建学习的记录,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 前期我不会公开源码,我想是一点点敲代码,不然复制.粘贴那就没意思了. ...
- 基于ASP.Net Core开发的一套通用后台框架
基于ASP.Net Core开发一套通用后台框架 写在前面 这是本人在学习的过程中搭建学习的框架,如果对你有所帮助那再好不过.如果您有发现错误,请告知我,我会第一时间修改. 知其然,知其所以然,并非重 ...
- 基于Asp.Net Core 5.0依赖Quartz.Net框架编写的任务调度web管理平台
源码地址: https://github.com/246850/Calamus.TaskScheduler 演示地址:http://47.101.47.193:1063/ 1.Quartz.NET框架 ...
- 基于ASP.NET core的MVC站点开发笔记 0x01
基于ASP.NET core的MVC站点开发笔记 0x01 我的环境 OS type:mac Software:vscode Dotnet core version:2.0/3.1 dotnet sd ...
- 基于Citus和ASP.NET Core开发多租户应用
Citus是基于PsotgreSQL的扩展,用于切分PsotgreSQL的数据,非常简单地实现数据“切片(sharp)”.如果不使用Citus,则需要开发者自己实现分布式数据访问层(DDAL),实现路 ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...
- 基于ASP.NET Core 6.0的整洁架构
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本节将介绍基于ASP.NET Core的整洁架构的设计理念,同时基于理论落地的代码 ...
- dot watch+vs code提成asp.net core开发效率
在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp.net core 2.0的今天,部分用法已经不太一样,所以就再写一篇文 ...
随机推荐
- Codeforces Round #259 (Div. 2) D
D. Little Pony and Harmony Chest time limit per test 4 seconds memory limit per test 256 megabytes i ...
- P1028 数的计算 洛谷
https://www.luogu.org/problem/show?pid=1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000), ...
- codevs——2750 心系南方灾区
2750 心系南方灾区 时间限制: 1 s 空间限制: 2000 KB 题目等级 : 青铜 Bronze 题解 查看运行结果 题目描述 Description 现在我国南方正在承受百年 ...
- 【CV论文阅读】An elegant solution for subspace learning
Pre: It is MY first time to see quite elegant a solution to seek a subspace for a group of local fea ...
- 踩坑录-利用Apche-POI.XSSFWorkbook.write,处理excel文件,通过response.outputstram下载文件,预览乱码。
问题概要 利用Apche-POI.XSSFWorkbook.write,处理excel文件,通过response.outputstram导出文件,预览乱码. 解决办法 1.检查设置response,代 ...
- (linux shell)第一章--小试牛刀(下)
文章来源: (linux shell)第一章--小试牛刀(下) 1.6 数组和关联数组 1.6.1 预备知识 Bash同一时候支持普通数组和关联数组.普通数组仅仅能使用整数作为数组索引,而关联数组能够 ...
- C#如何让Listbox支持多选
把SelectionMode改成MultiExtended
- openstack (4)---部署Glance镜像服务,Nova计算服务
一.Glance Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata及获取 ...
- MariaDB ----增删改
1> 查看表的(创建)状态: show careate table students1; 注: 自增, (保护机制) 好马不吃回头草 2>查看 字段:( 查看表的结构) des ...
- ubuntu下apache+mysql+php+mysql等之webserver搭建
相信非常多人跟我一样,想搭建一个自己的webserver.网上资料非常多.可是因为版本号的区别,总是存在依照一个教程来做无法全然实现的问题.近期我也折腾了好几天,google不能用,仅仅能百度,真想说 ...