RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图)
角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,“超级管理员”、“版主”都是角色。版主可管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用户,可将“版主”这个角色赋予该用户。
当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系)
在应用系统中,权限表现成什么?对功能模块的操作,对上传文件的删改,菜单的访问,甚至页面上某个按钮、某个图片的可见性控制,都可属于权限的范畴。有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成“用户-角色-权限-资源”的授权模型。而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联,这样可能更具便捷性和易扩展性。(见下图)
请留意权限表中有一列“权限类型”,我们根据它的取值来区分是哪一类权限,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操作权限、“FILE”表示文件的修改权限、“ELEMENT”表示页面元素的可见性控制等。
这样设计的好处有二。其一,不需要区分哪些是权限操作,哪些是资源,(实际上,有时候也不好区分,如菜单,把它理解为资源呢还是功能模块权限呢?)。其二,方便扩展,当系统要对新的东西进行权限控制时,我只需要建立一个新的关联表“权限XX关联表”,并确定这类权限的权限类型字符串。
这里要注意的是,权限表与权限菜单关联表、权限菜单关联表与菜单表都是一对一的关系。(文件、页面权限点、功能操作等同理)。也就是每添加一个菜单,就得同时往这三个表中各插入一条记录。这样,可以不需要权限菜单关联表,让权限表与菜单表直接关联,此时,须在权限表中新增一列用来保存菜单的ID,权限表通过“权限类型”和这个ID来区分是种类型下的哪条记录。
到这里,RBAC权限模型的扩展模型的完整设计图如下:
随着系统的日益庞大,为了方便管理,可引入角色组对角色进行分类管理,跟用户组不同,角色组不参与授权。例如:某电网系统的权限管理模块中,角色就是挂在区局下,而区局在这里可当作角色组,它不参于权限分配。另外,为方便上面各主表自身的管理与查找,可采用树型结构,如菜单树、功能树等,当然这些可不需要参于权限分配。
以上,是从基本的RBAC模型进行了扩展,具体的设计要根据项目业务的需要作调整。欢迎大家提出批评意见!
分享到:
相关推荐
### RBAC用户角色权限设计方案详解 #### 一、引言 在现代软件系统尤其是企业级应用中,用户角色权限管理是非常重要的一部分。合理的权限管理不仅可以提高系统的安全性,还能提升用户体验,使得不同用户能够根据自己...
综上所述,角色权限设计方案的核心是RBAC模型,通过角色作为权限的桥梁,简化了用户权限的管理和分配。用户组的引入进一步优化了这一过程,提供了更灵活的权限控制策略,尤其在处理大规模用户和复杂权限需求时显得尤...
### 基于RBAC改进模型的角色权限及层次关系分析 #### 一、引言 随着信息技术的发展,网络安全成为组织和个人关注的重点。基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种有效的访问控制机制,...
基于RBAC(Role-Based Access Control,基于角色的访问控制)的通用权限管理构件是一种广泛应用于企业级应用的解决方案,它通过角色来管理和控制用户的访问权限。下面将详细介绍这个系统以及与其相关的技术。 **...
文件“JAVA用户权限管理概要设计说明书-外发版.pdf”可能会提供更详细的设计方案,包括数据库表结构设计、接口设计以及权限验证机制。另一份“基于RBAC的权限管理系统的实现.pdf”可能是具体实现的技术文档,涵盖了...
RBAC0模型通过在用户与权限之间引入“角色”这一中间层,增强了模型的灵活性和可扩展性。具体来说,用户通过拥有不同角色从而获得相应的权限,这种机制使得权限管理更加简单高效。 #### 三、RBAC的扩展模型(RBAC1、...
本文档主要介绍了一种基于角色的权限管理系统(RBAC)的数据库设计方案,并通过具体的SQL脚本实现了该方案的基本功能。RBAC(Role-Based Access Control)是一种常用的安全管理机制,它通过定义不同的角色以及这些...
这个设计方案主要关注如何有效地设计和实施用户权限系统,确保每个用户只能访问他们被授权的数据和功能,从而保护系统的完整性和数据的安全性。下面我们将深入探讨这个话题。 首先,权限管理的核心在于用户角色。...
总结来说,"Springboot+Shiro+Redis实现RBAC用户权限管理"是一种高效、可扩展的解决方案,它结合了Springboot的便捷性、Shiro的权限管理功能和Redis的高速缓存能力,通过org.creazycake插件进一步简化了整合过程。...
基于角色的访问控制技术(Role-Based Access Control, RBAC)是一种有效的权限管理机制,它旨在规范用户对系统资源的访问,防止未经授权的访问和潜在的安全威胁。与传统的自主访问控制(DAC)和强制访问控制(MAC)...
综合来看,"Java layui 用户角色权限源码"覆盖了后端开发、前端展示、数据库设计和权限管理等多个方面,为开发者提供了一个可复用且可扩展的模板。通过深入学习和理解这套源码,开发者不仅可以提升自己的Java和Layui...
是一个现代Web应用的实现,它结合了Python的Django框架与前端的Vue.js 3框架,用于构建一套完整的角色基础访问控制(Role-Based Access Control,RBAC)和数据权限管理解决方案。在这样的系统中,RBAC是一种权限分配...
本文将深入探讨一个基于“三层架构+MVC模式+EasyUI”的RBAC(Role-Based Access Control,基于角色的访问控制)通用权限设计与实现的案例。 首先,三层架构是一种常见的软件设计模式,它将应用逻辑分为表现层、业务...
角色是一组权限的集合,用户被赋予某个或多个角色后,就拥有了对应的角色权限。这样的设计使得权限管理更加灵活,便于权限的集中管理和调整。 系统的主要功能可能包括: 1. **用户管理**:添加、修改、删除用户,...
在RBAC0级模型中,系统中的用户通过分配角色来获得操作权限,而不是直接给予每个用户具体的权限。这样做的好处是简化了权限管理,提高了安全性,并降低了权限变更的风险。用户、角色和权限之间存在明确的关系:用户...