`
rongxh2010
  • 浏览: 48871 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

扩展RBAC用户角色权限设计方案

阅读更多

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图)



角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,“超级管理员”、“版主”都是角色。版主可管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用户,可将“版主”这个角色赋予该用户。 

 

当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系)

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



请留意权限表中有一列“权限类型”,我们根据它的取值来区分是哪一类权限,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操作权限、“FILE”表示文件的修改权限、“ELEMENT”表示页面元素的可见性控制等。

 

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

 

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

 

到这里,RBAC权限模型的扩展模型的完整设计图如下:



随着系统的日益庞大,为了方便管理,可引入角色组对角色进行分类管理,跟用户组不同,角色组不参与授权。例如:某电网系统的权限管理模块中,角色就是挂在区局下,而区局在这里可当作角色组,它不参于权限分配。另外,为方便上面各主表自身的管理与查找,可采用树型结构,如菜单树、功能树等,当然这些可不需要参于权限分配。

 

以上,是从基本的RBAC模型进行了扩展,具体的设计要根据项目业务的需要作调整。欢迎大家提出批评意见!

  • 大小: 42.1 KB
  • 大小: 52.3 KB
  • 大小: 85.5 KB
  • 大小: 144.2 KB
分享到:
评论
19 楼 NanguoCoffee 2011-04-01  
1:功能权限
2:数据权限
3:权限(角色)继承

这个权限模型仅能满足 1 。
满足2就算不错了。
要全部满足就比较牛逼了

18 楼 zhangmingji 2011-03-29  
mark,以后看看
17 楼 iamjxc 2011-03-03  
右侧的权限-xx中间表,完全可以精简掉啊
在权限表里加: 元素ID number, 再加个: 元素type varchar2(40) 区分元素类型
16 楼 ltian 2011-03-01  
xu-zhx 写道
ltian 写道
RBAC这么简单吗,怀疑你是否看过ARBC或者是否理解其精髓,不要以为简单地引入了角色的概念就是RBAC了,恐怕连第二个级别的RBAC都没实现,勉强算是第一个级别的RBAC,恐怕也是最简单的功能,谈不上任何扩展

既然你这么厉害,何不拿出你的见解出来谈谈呢?

那些标准有什么可谈的。没时间科普啊,只是提醒一下!
15 楼 白云飞 2011-02-28  
楼主待的公司估计是我过去呆过的公司,某电力软件公司,然后这里所讨论的原型即来源与此公司的系统平台。
14 楼 xu-zhx 2011-02-28  
ltian 写道
RBAC这么简单吗,怀疑你是否看过ARBC或者是否理解其精髓,不要以为简单地引入了角色的概念就是RBAC了,恐怕连第二个级别的RBAC都没实现,勉强算是第一个级别的RBAC,恐怕也是最简单的功能,谈不上任何扩展

既然你这么厉害,何不拿出你的见解出来谈谈呢?
13 楼 爪哇岛岛主 2011-02-28  
喔曹,大家都是牛人,我看都没看,我一般是5张表解决的
12 楼 gagaboy 2011-02-28  
记录级别的权限我们的做法是:
对于每种数据角色建立不同的过滤条件,绑定数据角色。
系统后台执行的时候去将过滤条件串上去就可以了
11 楼 gagaboy 2011-02-28  
怎么感觉这么像我们公司产品的权限模型哈~~
我们的用户组还有静态组和动态组
其实做得细致的话,还要考虑数据权限角色(分行和列)和菜单功能权限角色分离,统一到用户组上和用户关联。这样会更灵活~~
10 楼 simplechinese 2011-02-27  
楼上区分下功能权限和数据权限,楼主这里没涉及到数据权限
9 楼 vtrtbb 2011-02-27  
实际复杂的是记录或者字段级别的权限设置,并不是页面端的控制

不知道对于记录级别的权限有什么好办法

举个最简单的例子,总经理看全部记录,部门经理部门,员工看自己 的三级权限,如何设置?
8 楼 ltian 2011-02-27  
RBAC这么简单吗,怀疑你是否看过ARBC或者是否理解其精髓,不要以为简单地引入了角色的概念就是RBAC了,恐怕连第二个级别的RBAC都没实现,勉强算是第一个级别的RBAC,恐怕也是最简单的功能,谈不上任何扩展
7 楼 七月十五 2011-02-27  
我认为楼主想得复杂了,或者想得太周密了
目前不太折腾程序了,发个2009年的想法,供大家批评

http://bbs.phpchina.com/thread-151874-1-1.html
引用
在RBAC权限控制系统中一般由五个部分实现:user, role, group, resource, access。我的模型设计如下图(以数据表的形式,类图就不帖了,见谅):

我想请教大家的是:
1、这样设计有什么缺陷,比如一个组织架构下,能否实现精确控制;
2、如此的设计Owner权限没有好的办法进行控制,有什么好的办法;
3、我是不是把组织架构、权限控制或是其它的概念混为一谈了,导致了设计上很不清晰,混杂了。明晰的设计方案是什么?

恭请大家指教。




6 楼 zshui_2007 2011-02-27  
hustlxjaw 写道
typhoon555 写道
哇。。。。楼主V5~~~画图就画了很久吧。。。

图是powerDesigner的pdm

另外,楼主,我觉得权限类型不统一,没种类型可能需要单独的表和逻辑。我建议把权限类型统一,所有的逻辑(菜单、按钮、操作等)都与统一的权限类型挂钩。

权限类型统一是个不错的想法,其实就是看权限授权是通过什么来做配置,细粒度控制到什么样程度,这样不用额外为三种不同资源分别再分开设计了。
5 楼 hustlxjaw 2011-02-26  
typhoon555 写道
哇。。。。楼主V5~~~画图就画了很久吧。。。

图是powerDesigner的pdm

另外,楼主,我觉得权限类型不统一,没种类型可能需要单独的表和逻辑。我建议把权限类型统一,所有的逻辑(菜单、按钮、操作等)都与统一的权限类型挂钩。
4 楼 dongcb678 2011-02-26  
f**kchina 写道
请问>>> “菜单表”,“页面元素”及“文件表”的授权管理系统实现了么
个人觉得这个是难点,前面基于spring security比较容易实现

我业余做了一个,你可以看看,在我的博客,有源码,可以跑,今天还在改明天再发一个版本
3 楼 rongxh2010 2011-02-26  
f**kchina 写道
请问>>> “菜单表”,“页面元素”及“文件表”的授权管理系统实现了么
个人觉得这个是难点,前面基于spring security比较容易实现

具体实现的话,可通过表的关联查询得到,根据用户ID查询到它拥有的角色,再通过角色查询到它所拥有的权限。例如,查询某个用户所有授权的菜单:
select m.*
  from menu m
where exists (select 'X'
          from privilege_menu pm, privilegee p
         where pm.privilege_id = p.privilege_id
           and p.privilege_type = 'MENU'
           and pm.menu_id = m.menu_id
           and exists
         (select 'X'
                  from role_privilege rp
                 where rp.privilege_id = pm.privilege_id
                   and exists (select 'X'
                          from user_role ur
                         where ur.role_id = rp.role_id
                           and ur.user_id = ?)))
其它的类似,在用户登录到系统中,将这些信息查询一次,加载到内存中就行。
2 楼 typhoon555 2011-02-26  
哇。。。。楼主V5~~~画图就画了很久吧。。。
1 楼 f**kchina 2011-02-26  
请问>>> “菜单表”,“页面元素”及“文件表”的授权管理系统实现了么
个人觉得这个是难点,前面基于spring security比较容易实现

相关推荐

    RBAC用户角色权限设计方案

    ### RBAC用户角色权限设计方案详解 #### 一、引言 在现代软件系统尤其是企业级应用中,用户角色权限管理是非常重要的一部分。合理的权限管理不仅可以提高系统的安全性,还能提升用户体验,使得不同用户能够根据自己...

    角色权限设计方案.pdf

    综上所述,角色权限设计方案的核心是RBAC模型,通过角色作为权限的桥梁,简化了用户权限的管理和分配。用户组的引入进一步优化了这一过程,提供了更灵活的权限控制策略,尤其在处理大规模用户和复杂权限需求时显得尤...

    基于RBAC改进模型的角色权限及层次关系分析

    ### 基于RBAC改进模型的角色权限及层次关系分析 #### 一、引言 随着信息技术的发展,网络安全成为组织和个人关注的重点。基于角色的访问控制(Role-Based Access Control,简称RBAC)作为一种有效的访问控制机制,...

    基于RBAC的通用权限管理构件

    基于RBAC(Role-Based Access Control,基于角色的访问控制)的通用权限管理构件是一种广泛应用于企业级应用的解决方案,它通过角色来管理和控制用户的访问权限。下面将详细介绍这个系统以及与其相关的技术。 **...

    基于RBAC的权限管理系统的实现

    文件“JAVA用户权限管理概要设计说明书-外发版.pdf”可能会提供更详细的设计方案,包括数据库表结构设计、接口设计以及权限验证机制。另一份“基于RBAC的权限管理系统的实现.pdf”可能是具体实现的技术文档,涵盖了...

    rbac的权限模式是什么

    RBAC0模型通过在用户与权限之间引入“角色”这一中间层,增强了模型的灵活性和可扩展性。具体来说,用户通过拥有不同角色从而获得相应的权限,这种机制使得权限管理更加简单高效。 #### 三、RBAC的扩展模型(RBAC1、...

    基于角色的权限管理数据库设计

    本文档主要介绍了一种基于角色的权限管理系统(RBAC)的数据库设计方案,并通过具体的SQL脚本实现了该方案的基本功能。RBAC(Role-Based Access Control)是一种常用的安全管理机制,它通过定义不同的角色以及这些...

    用户权限管理设计方案

    这个设计方案主要关注如何有效地设计和实施用户权限系统,确保每个用户只能访问他们被授权的数据和功能,从而保护系统的完整性和数据的安全性。下面我们将深入探讨这个话题。 首先,权限管理的核心在于用户角色。...

    Springboot+Shiro+Redis实现RBAC用户权限管理

    总结来说,"Springboot+Shiro+Redis实现RBAC用户权限管理"是一种高效、可扩展的解决方案,它结合了Springboot的便捷性、Shiro的权限管理功能和Redis的高速缓存能力,通过org.creazycake插件进一步简化了整合过程。...

    基于角色的访问控制技术(RBAC)

    基于角色的访问控制技术(Role-Based Access Control, RBAC)是一种有效的权限管理机制,它旨在规范用户对系统资源的访问,防止未经授权的访问和潜在的安全威胁。与传统的自主访问控制(DAC)和强制访问控制(MAC)...

    Java layui 用户角色权限源码

    综合来看,"Java layui 用户角色权限源码"覆盖了后端开发、前端展示、数据库设计和权限管理等多个方面,为开发者提供了一个可复用且可扩展的模板。通过深入学习和理解这套源码,开发者不仅可以提升自己的Java和Layui...

    基于Django+vue3的rbac权限和数据权限管理系统.zip

    是一个现代Web应用的实现,它结合了Python的Django框架与前端的Vue.js 3框架,用于构建一套完整的角色基础访问控制(Role-Based Access Control,RBAC)和数据权限管理解决方案。在这样的系统中,RBAC是一种权限分配...

    三层+MVC+easyui RBAC通用权限设计与实现(含数据库脚本)

    本文将深入探讨一个基于“三层架构+MVC模式+EasyUI”的RBAC(Role-Based Access Control,基于角色的访问控制)通用权限设计与实现的案例。 首先,三层架构是一种常见的软件设计模式,它将应用逻辑分为表现层、业务...

    SSH实现基于RBAC的权限管理系统

    角色是一组权限的集合,用户被赋予某个或多个角色后,就拥有了对应的角色权限。这样的设计使得权限管理更加灵活,便于权限的集中管理和调整。 系统的主要功能可能包括: 1. **用户管理**:添加、修改、删除用户,...

    hibernate struts 实现RBAC权限管理系统

    在RBAC0级模型中,系统中的用户通过分配角色来获得操作权限,而不是直接给予每个用户具体的权限。这样做的好处是简化了权限管理,提高了安全性,并降低了权限变更的风险。用户、角色和权限之间存在明确的关系:用户...

Global site tag (gtag.js) - Google Analytics