来源:http://blog.csdn.net/huanghanzzz2006/archive/2006/12/04/1429666.aspx

 
1        RBAC 介绍
RBAC 模型作为目前最为广泛接受的权限模型。
NIST (The National Institute of Standards and Technology,美国国家标准与技术研究院)标准RBAC模型由4个部件模型组成,这4个部件模型分别是基本模型RBAC0(Core RBAC)、角色分级模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和统一模型RBAC3(Combines RBAC)[1] 。RBAC0模型如图1所示。

图表 1 RBAC 0 模型
l          RBAC0 定义了能构成一个RBAC控制系统的最小的元素集合
在 RBAC之中,包含用户users(USERS)、角色roles(ROLES)、目标objects(OBS)、操作operations(OPS)、 许可权permissions(PRMS)五个基本数据元素,权限被赋予角色,而不是用户,当一个角色被指定给一个用户时,此用户就拥有了该角色所包含的 权限。会话sessions是用户与激活的角色集合之间的映射。RBAC0与传统访问控制的差别在于增加一层间接性带来了灵活性,RBAC1、 RBAC2、RBAC3都是先后在RBAC0上的扩展。
l          RBAC1 引入角色间的继承关系
角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构。
l          RBAC2 模型中添加了责任分离关系
RBAC2 的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户-角色-权限关系一起决定了RBAC2模型中用户的访问许可。
l          RBAC3 包含了RBAC1和RBAC2
既提供了角色间的继承关系,又提供了责任分离关系。
建立角色定义表。定出当前系统中角色。
因为有继承的问题,所以角色体现出的是一个树形结构。
2        权限设计:
 
配置资源以及资源的操作 : 这里资源可以定义为一个通用的资源模型。提供通用的资源统一接口。
 
 
 
 
 
数据库 ER 图:
 
关系图:
 
 
 
3        分析:
 
    根据以上的类关系图和ER图可以看出。整个权限可以抽象为五个对象组成。
OrgBean : 用于描述org模型。
Role : 用于描述角色。
Permission : 用于描述权限。
Resource : 用于描述资源。
Operation : 用于描述操作。
 
其中Permission中有Resource , Operation 的聚合,资源和操作组成权限。
Role 和 Permission 都有自包含。因为设计到权限的继承。
资源Resource 也可能出现一颗树形结构,那资源也要有自包含。
 
思想 :
权限系统的核心由以下三部分构成: 1. 创造权限, 2. 分配权限, 3. 使用权限,然后,系统各部分的主要参与者对照如下: 1. 创造权限 - Creator 创造, 2. 分配权限 - Administrator 分配, 3. 使用权限 - User :
1. Creator 创造 Privilege , Creator 在设计和实现系统时会划分,一个子系统或称为模块,应该有哪些权限。这里完成的是 Privilege 与 Resource 的对象声明,并没有真正将 Privilege 与具体 Resource 实例联系在一起,形成 Operator 。
2. Administrator 指定 Privilege 与 Resource Instance 的关联 。在这一步, 权限真正与资源实例联系到了一起, 产生了 Operator ( Privilege Instance )。 Administrator 利用 Operator 这个基本元素,来创造他理想中的权限模型。如,创建角色,创建用户组,给用户组分配用户,将用户组与角色关联等等 ... 这些操作都是由 Administrator 来完成的。
3. User 使用 Administrator 分配给的权限去使用各个子系统。 Administrator 是用户,在他的心目中有一个比较适合他管理和维护的权限模型。于是,程序员只要回答一个问题,就是什么权限可以访问什么资源,也就是前面说的 Operator 。程序员提供 Operator 就意味着给系统穿上了盔甲。 Administrator 就可以按照他的意愿来建立他所希望的权限框架 可以自行增加,删除,管理 Resource 和 Privilege 之间关系。可以自行设定用户 User 和角色 Role 的对应关系。 ( 如果将 Creator 看作是 Basic 的发明者, Administrator 就是 Basic 的使用者,他可以做一些脚本式的编程 ) Operator 是这个系统中最关键的部分,它是一个纽带,一个系在 Programmer , Administrator , User 之间的纽带。
 
4        权限API
   getPermissionByOrgGuid(String orgGuid )
      通过传入一个org的Guid , 拿到当前这个org对象都具有那些访问权限。
 getSourcePermissionByOrgGuid(String orgGuid , String resouceGuid)
    通过传入一个org的Guid 和 一个资源的Guid , 返回改Org对当前这个资源的访问权限。
 
getPermissionByResourceGuid(String resource)
    通过传入一个资源的Guid , 得到当前资源下都有那些权限定义。
 
havingHeritPermission(String orgGuid , String resouceGuid) : Boolean
    传入一个orgGuid, 资源GUID ,查看改OrgGuid下对资源是否有向下继承的权限。这里继承是资源的继承。即对父栏目有权限,可以继承下去对父栏目下的子栏目同样有权限。
 
havingPermission(String orgGuid , String resourceGuid) : Boolean
    判断某Org对某一资源是否用权限。
 
以上是粗粒度的权限API 。 以下为细粒度的权限:
 
getOperationByPermission(String permissionGuid)
    通过permission 的Guid 得到该permission 的所有有效操作。
 
getOperationByGuid(String permissionGuid , String resourceGuid)
    通过permision的Guid , 资源的Guid 得到该资源下所有的有效操作。
 
screeningOpreationByGuid (String permissionGuid , String resourceGuid , String orgGuid)
    通过permission , resource , org的Guid 得到改Org对这一资源的有效操作。
 
hasOperation(String operationGuid) : boolean
    通过传入的operationGuid 返回是否具有操作权限。
 
5        权限的实现:
1 .表单式认证,这是常用的,但用户到达一个不被授权访问的资源时, Web 容器就发
出一个 html 页面,要求输入用户名和密码。
2 .用 Filter 防止用户访问一些未被授权的资源, Filter 会截取所有 Request/Response ,
然后放置一个验证通过的标识在用户的 Session 中,然后 Filter 每次依靠这个标识来决定是否放行 Response 。
这个模式分为:
Gatekeeper :采取 Filter 或统一 Servlet 的方式。
Authenticator : 在 Web 中使用 JAAS 自己来实现。
 
Filter 拦截只是拦截该用户是否有访问这个页面,或这一资源的权限。真正做到显示后拦截是在应用程序内部去做。
 
做显示拦截提供API , 标签这两种方式。

基于RBAC的权限设计模型相关推荐

  1. 基于RBAC的权限设计

    来源:http://www.phpchina.com/html/73/5173_itemid_10049.html 基于RBAC 的权限设计模型: 1        RBAC 介绍   RBAC 模型 ...

  2. 基于角色的权限控制模型RBAC

    本文来说下基于角色的权限控制模型RBAC 文章目录 概述 RBAC权限模型简介 RBAC的演化进程 用户与权限直接关联 一个用户拥有一个角色 一个用户一个或多个角色 页面访问权限与操作权限 数据权限 ...

  3. RBAC角色权限设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  4. 基于属性的权限控制模型ABAC

    本文来说下基于属性的权限控制模型ABAC 文章目录 RBAC 的缺憾 什么是ABAC访问控制模型 ABAC相关术语 ABAC的使用场景 为什么 ABAC 能解决复杂场景下的问题 Attribute 易 ...

  5. 基于角色的权限设计(一)

    在任何系统中,权限设计是最基础的东西,本文给出一个基于角色的权限设计的循序渐进的设计方案. 在权限系统中,功能(权限)是最小的单位,比如起草新闻.编辑新闻.审核新闻.删除新闻等,而角色是一类功能的集合 ...

  6. 【技术】基于数据库的权限设计

    基于数据库的权限设计 基于数据库的权限设计 表设计 基于数据库的权限设计 目前大部分的系统都需要权限控制,这也是系统的标配,目前市面上已经有很多成熟的权限框架,比如:Shiro.Spring Secu ...

  7. 图文详解基于角色的权限控制模型RBAC

    我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问.操作.数据权限.形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control).强制 ...

  8. OAuth2在分布式微服务架构下基于角色的权限设计(RBAC)

    在前两节的基础上,对权限控制作进一步的分析与设计. RBAC(Role-Base Access Control,基于角色的访问控制) 本篇内容基于个人理解,不当之处,欢迎批评指正. 前两篇内容: [图 ...

  9. 基于shiro的权限设计

    shiro介绍 Apache shiro是一个权限控制框架,它将安全认证抽取出来,实现用户身份认证,权限授权,加密,会话管理等功能,是一个通用的安全认证框架,而且还可以用于分布式集群.功能如下 1.验 ...

最新文章

  1. win7,windowsXP安装mysql-5.1.49-win32,中文版、英文版,通吃
  2. Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
  3. Servlet - HTTP超文本传输协议
  4. Codeforces Round #265 (Div. 1) C. Substitutes in Number dp
  5. python Logging日志记录模块详解
  6. 如何处理错误消息Unable to install breakpoint due to missing line number attributes
  7. 便利的开发工具-log4cpp快速使用指南
  8. 那些读博的女生,怎样通过“九九八十一关”?
  9. 安卓安装kali linux之Termux
  10. Polygon对象和Polyline对象的组成形式
  11. 邢台农业计算机学校,邢台农业学校
  12. Oprofile工具的使用
  13. 驱动精灵、人生限速曲线救国
  14. android qq下载路径,手机qq下载的文件在哪个文件夹 查找路径解答
  15. Android系统稳定性简述
  16. sping循环依赖:but has eventually been wrapped. This means that said other beans do not use the final
  17. 苹果6换屏多钱_iPhone12系列屏幕维修价格公布 苹果12换屏多少钱
  18. rpmbuild告警mangling shebang in xxx from /bin/python to /usr/bin/python/python2.
  19. OpenCV-图像色温
  20. 乘风破浪的文思海辉,以及TA的行业数字化“新人设”

热门文章

  1. (转)swc与swf的区别
  2. Boost::Regex 使用方法 (英文)
  3. 线程的局部变量ThreadLocal概念
  4. 在MFC的picture控件中如何显示Mat图
  5. swift5主线程延迟操作的几种写法
  6. fastjson jar包_Fastjsonlt;=1.2.47反序列化RCE漏洞(CNVD201922238)
  7. 3、AD使用技巧分享
  8. DELL服务器T410进行系统修复,ibm T410 BIOS修复过程-BIOS维修网站www.biosrepair.com
  9. java代码杨辉三角_用java实现杨辉三角的示例代码
  10. linux的静态编译elf无法调试,macos-运行arm-elf-gcc编译代码时出现段错误