今天面试谈到一个权限管理,总结下权限管理模块的数据库部分设计

我们比较常见的就是基于角色的访问控制,用户通过角色与权限进行关联。简单地说,一个用户拥有多个角色,一个角色拥有多个权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间、角色与权限之间,通常都是多对多的关系。如下图:

基于这个,得先了解角色到底是什么?我们可以理解它为一定数量的权限的集合,是一个权限的载体。例如:一个论坛的“管理员”、“版主”,它们都是角色。但是所能做的事情是不完全一样的,版主只能管理版内的贴子,用户等,而这些都是属于权限,如果想要给某个用户授予这些权限,不用直接将权限授予用户,只需将“版主”这个角色赋予该用户即可。

但是通过上面我们也发现问题了,如果用户的数量非常大的时候,就需要给系统的每一个用户逐一授权(分配角色),这是件非常繁琐的事情,这时就可以增加一个用户组,每个用户组内有多个用户,除了给单个用户授权外,还可以给用户组授权,这样一来,通过一次授权,就可以同时给多个用户授予相同的权限,而这时用户的所有权限就是用户个人拥有的权限与该用户所在组所拥有的权限之和。用户组、用户与角色三者的关联关系如下图

通常在应用系统里面的权限我们把它表现为菜单的访问(页面级)、功能模块的操作(功能级)、文件上传的删改,甚至页面上某个按钮、图片是否可见等等都属于权限的范畴。有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成“用户-角色-权限-资源”的授权模型。而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联,这样可能更具便捷性和易扩展性。如下图:

这里特别需要注意以下权限表中有一列“PowerType(权限类型)”,我们根据它的取值来区分是哪一类权限,可以把它理解为一个枚举,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操作权限、“FILE”表示文件的修改权限、“ELEMENT”表示页面元素的可见性控制等。

这样设计的好处有两个。一、不需要区分哪些是权限操作,哪些是资源,(实际上,有时候也不好区分,如菜单,把它理解为资源呢还是功能模块权限呢?);二、方便扩展,当系统要对新的东西进行权限控制时,我只需要建立一个新的关联表“权限XX关联表”,并确定这类权限的权限类型字符串即可。

需要注意的是,权限表与权限菜单关联表、权限菜单关联表与菜单表都是一对一的关系。(文件、页面权限点、功能操作等同理)。也就是每添加一个菜单,就得同时往这三个表中各插入一条记录。这样,可以不需要权限菜单关联表,让权限表与菜单表直接关联,此时,须在权限表中新增一列用来保存菜单的ID,权限表通过“权限类型”和这个ID来区分是种类型下的哪条记录。最后扩展出来的模型完整设计如下图:

注意上面我额外增加了一个操作日志表;

随着系统的日益庞大,为了方便管理,如果有需要可引入角色组对角色进行分类管理,跟用户组不同,角色组不参与授权。例如:当遇到有多个子公司,每个子公司下有多个部门,这是我们就可以把部门理解为角色,子公司理解为角色组,角色组不参于权限分配。另外,为方便上面各主表自身的管理与查找,可采用树型结构,如菜单树、功能树等,当然这些可不需要参于权限分配。

另外之前用过一个比较简单的权限管理数据库设计,一个用户只有一个角色,只需要五个表,改天再分享。。。。

权限管理模块数据库设计相关推荐

  1. 一个权限管理模块的设计(转载)

    一 个用户权限管理模块的设计思路: 1. 权 限资源(功能资源) 系统的所有权限信息.权限具有上下级关系,是一个树状的结构.如下: <!--[if !supportLists]-->u  ...

  2. spring整合shiro权限管理与数据库设计

    之前的文章中我们完成了基础框架的搭建,现在基本上所有的后台系统都逃不过权限管理这一块,这算是一个刚需了.现在我们来集成shiro来达到颗粒化权限管理,也就是从连接菜单到页面功能按钮,都进行权限都验证, ...

  3. java为用户分组_用户分组权限管理模块的设计

    接口和抽象类的设计 class="java" name="code"> //身份解决者接口 public interface IdentityResolv ...

  4. MySQL学习笔记8:权限管理、数据库备份与设计

    1.前言 学习视频源自:[狂神说Java]MySQL最新教程通俗易懂 B站视频链接:https://www.bilibili.com/video/BV1NJ411J79W [狂神说Java]MySQL ...

  5. 通俗易懂权限管理模块设计-Java

    最近一直在做CMS系统,发现一些内容其实都是重复出现的,例如权限管理模块.权限管理模块就是为了管理用户是否有权利访问某个权限,如果不能则拒绝访问.其实Java中已经有很成熟的权限管理框架,例如 Shi ...

  6. 一个简易实用的web权限管理模块的应用与实现

    本文介绍一个简易实用的web权限管理模块的应用与实现. 先介绍数据模型和应用界面,后继对实现细节做选择性阐述. 数据表关系如下: 该图标明了登陆用户.角色.部门(机构).用户组.角色和模块功能之间的关 ...

  7. 基于区块链的Smart系统-题库及试卷管理模块的设计与开发

      1引言 1.1课题背景 随着网络技术的飞速发展,现在很多国外的大学和社会其他部门都已经开设了远程教育,通过计算机网络实现异地教育和培训.现在,计算机硬件技术的发展已经达到了相当高的水平.但是,远程 ...

  8. 光盘出租系统mysql_碟片出租管理子系统数据库设计.doc

    碟片出租管理子系统数据库设计 武汉理工大学华夏学院 课 程 设 计 课程名称 数据库原理课程设计 题 目:碟片出租管理子系统数据库设计 专 业 班 级 姓 名 成 绩 指导教师 2013 年6 月17 ...

  9. Expo大作战(三十)--expo sdk api之Permissions(权限管理模块),Pedometer(计步器api)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  10. Yii框架中使用SRBAC作为权限管理模块时遇到的问题

    Yii框架中使用SRBAC作为权限管理模块时遇到的问题 Yii框架中使用SRBAC作为权限管理模块时遇到的问题 看到Yii中提供RBAC的插件,SRBAC,就想用用. 结果按照手册上的安装办法,整来整 ...

最新文章

  1. CSDN实现自动点赞
  2. 程序员|那天下班回家,突然民警叫住我....
  3. (八)JAVA springcloud ssm b2b2c多用户商城系统源码:配置中心服务化和高可用
  4. 【设计模式】第四章 工厂模式
  5. 美SEC委员:不要轻易创建NFT,它可能被归类为证券
  6. 《Objective-C函数速查实例手册》——导读
  7. ubuntu安装teamview
  8. mpu6050常见问题
  9. 计算机导论(1—6章)笔记
  10. Altium Designer原理图标题栏显示参数的解决方法
  11. 债券ETF认申赎_基金合同_嘉实基金
  12. 排队论模型(七):排队系统的优化
  13. unityAndroid9.0不能下载AB包的问题
  14. MariaDB GRANT ALL PRIVILEGES Access denied for user
  15. linux tar 7z,.tar.gz和.gz或.tar.7z和.7z有什么区别?
  16. java.lang.ClassNotFoundException: org.springframework.web.servlet.HandlerMapping解决方法
  17. java 生鲜在线购买网站 ssm生鲜商城
  18. 使用blender做一个地球模型,贴上UV纹理,导出Obj格式
  19. 国内移动旅行类APP评测与盈利情况
  20. html小球跳跃技术原理,HTML5 - Canvas的使用样例15(动画的实现,以弹跳小球为例)...

热门文章

  1. 图像的二维傅里叶变换的频谱图代码实现
  2. 服务器lsass系统错误,lsass.exe系统错误解决教程
  3. vmware tools的下载
  4. GGGIS地图下载器
  5. 介绍一个可以轻松下载病毒样本的数据库
  6. PDF可以转换成CAD图纸吗?
  7. 内部审计具体准则第28号—信息系统审计
  8. [转载] 七龙珠第一部——第016话 寻找石头的功夫
  9. 诚龙网刻报错_诚龙网刻图文教程
  10. C语言新手入门可执行代码(加备注)