2、用户权限管理,数据库表设计

2、用户权限管理,数据库表设计,第1张

网上资料说权限设计 = 功能权限 + 数据权限,我认为还是很有道理的。之前项目中只涉及到功能权限,没有数据权限,原因是最开始设计时,数据已经绑定在特定的用户下了,而且涉及到的表数量很少,不需要单独考虑数据权限的问题。

权限管理,最细致的权限管理有 用户,用户组,角色,权限,功能。根据不同的需求适当选择,如 用户量过大,每个人都授权和麻烦,就引入用户组,对用户组赋予权限。功能上也根据业务不同做适当的扩展。由于如用户权限之前存在多对多关系,需要引入中间表。

本系统设计如下:

数据量很小,功能也不复杂,所以只有用户,角色,权限(功能)及产生的中间表。

表中的数据都是提前填的,用户登陆,查ermroleuser表,获取角色,查ermrolefunction表,获取功能,再查ermfunction表,返回该用户的功能的中文,在页面上展示。

功能权限详细设计请参考,本项目也是受此启发:

http://blog.csdn.net/painsonline/article/details/7183613/

需求:给一个原来没有权限的数据配置系统加上登录,权限功能,不同角色查同一张表返回结果不同。

思路:所谓数据权限,关注点在于实体属性值、条件、允许值,用户登录后,查询该用户的查询条件,根据条件获取数据即可。详细表结构设计可以参考: https://zhuanlan.zhihu.com/p/31339794

具体介绍一下每个字段含义:

(1)主键 id;

(2)acl_id 映射权限点表主键,代表每行记录是针对哪个权限点的;

(3)status 代表当前这条配置是否有效,方便临时激活与禁用;

(4)param 代表需要校验的参数名,允许一个请求有多个参数参与数据校验;如果参数复杂,比如包含对象,定义的参数可能为a.b.c 这种多级的形式,建议不要太复杂

(5)operation 代表数据拦截的规则,使用数字代表是等于、大于、小于、大于等于、小于等于、包含、介于之间等,可以根据自己需要增加或减少支持的拦截规则

(6)value1 和 value2 用来和param、operation组成一个关系表达式,比如:1<=a<2

next_param_op 字段根据需要使用,如果一个权限点支持多条数据规则时,连接两个规则之间的 *** 作,|| 还是 &&

(7)seq 字段用于某个权限点包含多条数据权限规则时的顺序

假设有这么一条数据,那么他的含义是:id为1(acl_id)的权限点,配置了一条有效(status=1)的数据规则,规则是:传入参数id(param)的值要大于(operation)10(value1)

这种设计很细致了,当然我的项目没有那么复杂,所以最终没有采用这个。

http://www.cnblogs.com/jeffwoot/archive/2008/12/23/1359591.html 讲述了数据权限设计的演化过程。

本系统跟权限相关的表结构如下:

前后台可以正式接通以后,我们就可以设计基础的几个数据库表了,菜单表、角色表、用户表、角色菜单表和用户角色表,有这5个表我们就可以搞定用户权限。

因为要开始涉及数据库 *** 作,每个表的单表 *** 作我们都会创建Controller、Service、Entity、Mapper、MapperXML,我们先来新建数据库表结构,先建立最基础的表结构,后续有需要再完善,毕竟使用了MybatisPlus,改变结构之后只需要在实体类加属性就好了。

用户表:

角色表:

用户角色表:

菜单表:

角色菜单表:

在用户表中插入超管账号:

引入Lombok方便写实体类

新建用户相关类:

修改完善部分登录服务代码:

重启项目调用登录,控制台输出一下内容

LoginForm(username=admin, password=21232f297a57a5a743894a0e4a801fc3)

SysUserEntity(id=1, username=admin, password=admin, salt=123456, name=超级管理员, createTime=2022-01-27T17:14:16, createBy=null, updateTime=2022-01-27T17:14:16, updateBy=null)

SaLog -->: 账号[admin]登录成功

整体登录流程就是这样了,继续完善。先确定密码加密方式:

md5(md5(password)+md5(salt))

在测试类中生成密码存到数据库中

登录接口中密码已经在前端经过md5加密,所以修改后端代码

新建菜单Controller

重启登录

OK,接下来从完善菜单管理开始逐步写。

实现业务系统中的用户权限管理 设计篇

B/S系统中的权限比C/S中的更显的重要 C/S系统因为具有特殊的客户端 所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现 而B/S中 浏览器是每一台计算机都已具备的 如果不建立一个完整的权限检测 那么一个 非法用户 很可能就能通过浏览器轻易访问到B/S系统中的所有功能 因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测 让经过授权的用户可以正常合法的使用已授权功能 而对那些未经授权的 非法用户 将会将他们彻底的 拒之门外 下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统

需求陈述不同职责的人员 对于系统 *** 作的权限应该是不同的 优秀的业务系统 这是最基本的功能

可以对 组 进行权限分配 对于一个大企业的业务系统来说 如果要求管理员为其下员工逐一分配系统 *** 作权限的话 是件耗时且不够方便的事情 所以 系统中就提出了对 组 进行 *** 作的概念 将权限一致的人员编入同一组 然后对该组进行权限分配 权限管理系统应该是可扩展的 它应该可以加入到任何带有权限管理功能的系统中 就像是组件一样的可以被不断的重用 而不是每开发一套管理系统 就要针对权限管理部分进行重新开发 满足业务系统中的功能权限 传统业务系统中 存在着两种权限管理 其一是功能权限的管理 而另外一种则是资源权限的管理 在不同系统之间 功能权限是可以重用的 而资源权限则不能

关于设计

借助NoahWeb的动作编程理念 在设计阶段 系统设计人员无须考虑程序结构的设计 而是从程序流程以及数据库结构开始入手 为了实现需求 数据库的设计可谓及其重要 无论是 组 *** 作的概念 还是整套权限管理系统的重用性 都在于数据库的设计

我们先来分析一下数据库结构

首先 action表(以下简称为 权限表 ) gorupmanager表(以下简称为 管理组表 ) 以及master表(以下简称为 人员表 ) 是三张实体表 它们依次记录著 权限 的信息 管理组 的信息和 人员 的信息 如下图

这三个表之间的关系是多对多的 一个权限可能同时属于多个管理组 一个管理组中也可能同时包含多个权限 同样的道理 一个人员可能同时属于多个管理组 而一个管理组中也可能同时包含多个人员 如下图

由于这三张表之间存在着多对多的关系 那么它们之间的交互 最好使用另外两张表来完成 而这两张表起著映射的作用 分别是 actiongroup 表(以下简称 权限映射表 )和 mastergroup 表(以下简称 人员映射表 ) 前者映射了权限表与管理组表之间的交互 后者映射了人员表与管理组表之间的交互 如下图

另外 还需要一张表来控制系统运行时左侧菜单中的权限分栏

也就是 权限分栏表 如下图

根据上面的分析 我们进行数据库结构设计 如下图

点击这里查看权限管理系统数据表字段设计

为了能够进行良好的分析 我们将数据库结构图拆分开来 三张实体表的作用已经很清晰 现在我们来看一下两张映射表的作用

一 权限映射表 如下图

首先 我们来了解一下权限映射表与管理组表以及权限表之间的字段关联

看图中的红圈 先看gorupid字段相关联 这种关联方式在实际数据库中的表现如下图

如图中所示 管理组表中 超级管理员 的groupid为 那么权限映射表中groupid为 的权限也就是 超级管理员 所拥有的权限

使用groupid字段关联 是为了查到一个管理组能够执行的权限有哪些 但这些权限的详细信息却是action字段关联所查询到的

action字段相关联在数据库中的表现如下图

通过这种关联 才查询到权限映射表之中那些权限的详细信息 综合起来 我们就知道了一个管理组可以执行的权限有哪些 以及这些权限的详细信息是什么

或许你会问 为什么不使用actionid字段相关联呢因为

权限表中的id字段在经过多次的数据库 *** 作之后可能会发生更改 权限映射表中仅仅记录著一个管理组可以执行的权限 一旦权限表中的id更改 那么权限映射表中的记录也就更改了 一个管理组可以执行的权限势必将出错 这是非常不希望的

考虑到上面的情况 所以应该使用action字段相关联 因为

在权限表中 id可能发生变化 而action字段却是在任何情况下也不可能发生变化的

权限映射表中记录的action字段也就不会变 一个管理组可以执行的权限就不会出错了

二 人员映射表 如下图

我们来了解一下人员映射表与管理组表以及人员表之间的字段关联 如下图

lishixinzhi/Article/program/net/201311/13938


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10070877.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存