数据设计之权限的实现_数据库其它

来源:脚本之家  责任编辑:小易  
目录
前言RBAC模型数据权限数据规则关联资源、用户继续优化小结

前言

在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。

控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资源(即我们常说的数据权限)使用RBAC模型是不够的,本文我们尝试在RBAC模型的基础上融入数据权限的管理控制。

首先让我们先看下RBAC模型。

RBAC模型

RBAC是Role-BasedAccess Control的英文缩写,意思是基于角色的访问控制。

RBAC事先会在系统中定义出不同的角色,不同的角色拥有不同的权限,一个角色实际上就是一组权限的集合。而系统的所有用户都会被分配到不同的角色中,一个用户可能拥有多个角色。使用RBAC可以极大地简化权限的管理。

RBAC模型还可以细分为RBAC0,RBAC1,RBAC2,RBAC3。这里我们不讨论他们之间的差异,感兴趣的同学可以自行研究,我们主要聚焦于常见的RBAC0模型上。

如下图就是一个经典RBAC0模型的数据库设计。

在RBAC模型下,系统只会验证用户A是否属于角色RoleX,而不会判断用户A是否能访问只属于用户B的数据DataB。这种问题我们称之为“水平权限管理问题”。

数据权限

列表数据权限,主要通过数据权限控制行数据,让不同的人有不同的查看数据规则;要实现数据权限,最重要的是需要抽象出数据规则。

数据规则

比如我们系统的商机数据,需要从下面几个维度来控制数据访问权限。

销售人员只能看自己的数据;各大区的销售经理只能看各区域的数据(安徽大区的销售经理看安徽区域的商机数据),同理也适用于某BG分管领导只能看所在BG的商机数据;财务人员只能看金额小于一万的数据。

上面的这些维度就是数据规则。

这样数据规则的几个重点要素我们也明晰了,就是规则字段规则表达式规则值

上面三个场景对应的规则分别如下:

规则字段:创建人,规则表达式: = ,规则值:当前登录人规则字段:所属大区,规则表达式: = ,规则值:安徽大区规则字段:销售金额,规则表达式: < ,规则值:10000

规则字段配置说明: 

条件表达式:大于/大于等于/小于/小于等于/等于/包含/模糊/不等于
规则值:指定值 ( 固定值/系统上下文变量 )

关联资源、用户

光有数据规则是不够的,我们还需要把数据规则跟资源和用户进行绑定。

数据规则与资源的绑定很简单,我们只需要建立一个中间表即可,如下图所示:

这样资源就可以关联上了数据规则。

在应用设计上我们需要一个单独的数据规则管理功能,方便我们录入数据规则,然后在资源管理页面(比如商机列表)上就可以选择内置的数据规则进行资源与规则的绑定。

那么如何让不同的用户拥有不同的数据规则呢?

在RBAC模型中,用户是通过授予不同的角色来进行资源的管理,同理我们可以让角色在授予权限的时候关联上数据规则,这样最终在系统上就体现为不同的用户拥有不同的数据规则。

有点拗口,我们还是按上面的例子来说。

销售人员、大区销售经理、财务人员属于不同的角色,他们都拥有商机列表这个资源权限,但是在给这些角色绑定商机列表资源权限时我们可以勾选对应的数据规则(上面已经实现资源与数据规则的绑定)。体现在数据库设计中我们可以在角色资源对应关系表 Role_Permission中添加一个字段用于存储关联的数据规则,如果有多个数据规则可以使用分隔符分割。

最终RBAC模型演变成如下所示的模型:

按照上面的设计我们需要区分各个大区管理的数据权限则需要建立不同的大区角色,如安徽大区销售经理、上海大区销售经理,然后分别给角色勾选对应的数据规则。这里就类似于RBAC1中的角色继承的概念了。

这样我们就基本实现了RBAC与数据规则的绑定,但是我们还有个问题就是如何在系统中落地。

这里我们就要借助大名鼎鼎的AOP来实现了,这篇文章只讲原理不讲实现,所以我们只顺带提一下实现方案。

自定义一个数据权限的注解,比如叫PermissionData在对应的资源请求方法,比如商机列表上添加自定义注解@PermissionData利用AOP抓取到用户对应角色的所有数据规则并进行SQL拼接,最终在SQL层面实现数据过滤。

继续优化

在上面的设计中我们通过给不同角色绑定不同数据规则实现了数据权限,但是考虑下面一种场景:某角色需要看到的数据范围为 “所属大区为安徽大区且事业部为消费者事业部的商机数据”,

在这种场景里按照我们之前的设计需要建立两个数据规则:

所属大区 = 安徽大区所属事业部 = 消费者事业部

然后再建立2个不同的角色,分别授予不同的数据规则,如果这样的场景比较多的话很容易出现角色爆炸的情况,所有我们这里再抽取出 数据规则组 的概念。

一个数据规则组有多个数据规则,数据规则之间通过 AND 进行连接,放一张应用设计图:

体现在数据库设计中就变成了如下所示:

小结

通过上面8张表的设计我们实现了RBAC模型与数据权限的结合,当然这里还有继续优化的空间。比如这里的规则字段和规则值我们可以抽取出对应的字典表,让数据规则表去关联这些字典字段,这样在应用层配置数据规则的时候就不需要管理员手动填写而是从字典项中去选择了,减少了数据规则配置出错的概率。

数据权限是一个实现相对比较复杂的功能,这里我们选择的是在RBAC模型基础上进行扩展,如果你有更好的解决方案欢迎留言告诉我。

到此这篇关于数据设计之权限的实现的文章就介绍到这了,更多相关数据权限内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:复杂系统中的用户权限数据库设计解决方案详解spring整合shiro权限管理与数据库设计MySQL之权限以及设计数据库案例讲解

  • 本文相关:
  • sqlserver与oracle常用函数实例对比汇总
  • sql prompt--绝好的sql语法提示工具
  • 高效的数据同步工具datax的使用及实现示例
  • sql server 与access、excel的数据转换
  • 大数据时代的数据库选择:sql还是nosql?
  • 通过一分钟快速了解索引技巧
  • 大数据spark sql中日期转换from_unixtime和unix_timestamp的使用
  • sql实现分页查询方法总结
  • sql查询出表、存储过程、触发器的创建时间和最后修改时间示例
  • ubuntu 17.10安装phpmyadmin数据库管理工具配置详解
  • 数据库管理系统的设计与实现
  • 如何实现权限精确到字段,请说出数据库中表的设计,说出具体的...
  • 权限数据库设计
  • 如何在应用系统中实现数据权限的控制功能
  • 如何写一个好的 权限控制类,如何设计数据库
  • 求关系型oa系统中权限设计思路和数据库设计思路
  • php如何用代码实现权限控制问题 ,以及具体的数据库设计
  • 业务系统系统权限数据库设计问题
  • 用户角色权限如何设计数据库表
  • 如何在系统设计中引用数据库实现图书销售
  • C# 权限控制如何实现?有三个角色,分别是管理员,教师,学生。
  • 实现用户注册登录功能,关于数据库 用户注册表和用户登录表的...
  • C#登录窗体进入主窗体的权限设计?主窗体中有数据录入,数据...
  • 如果设计数据库以及在用户登陆的时候判断用户权限。
  • Delphi 用户权限自动生产树形菜单,数据表怎么设计?
  • 求IT大神帮忙。论坛权限管理系统如何设计数据库。
  • protel怎样设计数据库文件的权限管理
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页数据库其它复杂系统中的用户权限数据库设计解决方案详解spring整合shiro权限管理与数据库设计mysql之权限以及设计数据库案例讲解sqlserver与oracle常用函数实例对比汇总sql prompt--绝好的sql语法提示工具高效的数据同步工具datax的使用及实现示例sql server 与access、excel的数据转换大数据时代的数据库选择:sql还是nosql?通过一分钟快速了解索引技巧大数据spark sql中日期转换from_unixtime和unix_timestamp的使用sql实现分页查询方法总结sql查询出表、存储过程、触发器的创建时间和最后修改时间示例ubuntu 17.10安装phpmyadmin数据库管理工具配置详解navicat premium 15&nnavicat premium15安装及破解教程详解亲测有效最新datagrip2020.2.x破解版激活码的步骤详解(sql join on 用法sqlserver、mysql、oracle三种数据库的优缺mysql mysqldump命令使用详解sql中代替like语句的另一种写法如何让sql运行得更快关于adox的相关知识如何取得一个表的所有字段名用逗号分割数据库查询优化(主从表的设计)常用sql语句优化技巧总结【经典】navicat15激活使用教程lakehouse数据湖并发控制陷阱分析深入sql中pivot 行列转换详解sql中一些小巧但常用的关键字小结特殊的存储过程-触发器概述使用dump transaction with no_log的危险性说明数据库报:ora-01196(ora-10458/ora-01110)错误的ado.net数据库访问技术
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved