`
metadmin
  • 浏览: 166259 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

《玩转细粒度权限管理》 三,用户角色权限RBCA

阅读更多

 

第三章

用户角色权限RBCA

 

 

第一章介绍了专业细粒度权限管理软件 Metadmin 的安装。第二章讲解了对于 WEB 页面的控制。哪些页面需要登录才能访问,哪些页面不需要登录就能访问。需要登录的页面,又如何页面访问权限呢?即具有什么样角色的人才能访问。

 

本章详细讲解用户角色权限关系。这也就是 RBCA(Role Based Access Control ,基于角色的访问控制 ) 。功能级权限控制到本章为止,就介绍完毕。下章开始介绍细粒度权限控制。

 

场景介绍

基于角色控制模型已经深入人心,关系并不复杂,广泛运用于各个系统。通过给用户赋予角色、角色拥有权限的模式,达到控制用户具有权限的目的。同时,还复用了角色,这样可以让多个相同职务(或职能)的人拥有同样的角色。

 

比如:

 

  1. 张三是管理员,他可以修改系统配置参数;
  2. 李四是客服人员,他可以呼叫客户,处理客户反馈;
  3. 王五是销售人员,他可以下订单,维护客户资料。

 

RBAC 局限性

通过这种定义方式,只要拥有该权限的人,访问该资源的时候,会产生相同的效果。比如:李四是北京客服人员,而洪七是上海客服人员,他们呼叫的客户范围是不同的。

如果,定义北京客户人员,上海客户人员 2 种角色,那么如果有多个地方,这维护起来太费力。

如果,给李四和洪七的用户名下,分配资源。就是有些网友提出的解决方案:用户--资源表。那么每个用户都要维护一次,每个客户维护一次,这更费力。

显然上述两种方案,都不可取。因为,这些都属于细粒度、数据级的权限控制, RBAC 模型无能为力。这种细粒度控制下章开始介绍。

数据库模型

基本信息表

权限定义,要包含以下几大类信息:

1, 该权限的基本信息;

2, 一般会将整个系统权限看成一棵树,该权限在权限树上的位置;

3, 该权限对应的资源,一般为 WEB URL

 

那么权限表有这么几个字段: id, name, description, parented, url, target

 

角色定义非常简单: id, name, description

 

用户表就不多说了,这是一个业务领域的表。不同系统,用户表结构是不一样的。

权限关系表

角色、权限关系表: id, privilegeId, roleId ,一个角色可以拥有多个权限,一个权限可以被多个角色拥有,多对多关系。

 

用户、角色关系表: id, userId, roleId ,同样是多对多关系。

判断逻辑

指定用户、指定权限,判断该用户是否拥有该权限。

select roleId from 用户、权限管理系表 where userId=? and roleId in( select roleId from 角色、权限关系表 where privilegeId=?)

如果有记录,表明该用户拥有该权限,否则表示不拥有。

如果使用 Metadmin

Metadmin 是细粒度权限管理中间件,可以在 www.metadmin.com 下载试用版。以下界面均引用下载程序包里面的演示示例。

 

在安装用户元数据文件的时候, Metadmin 会自动创建相关权限表(权限表、角色表、权限角色关系表、角色用户关系表)。在 RBAC 控制方面, Metadmin 提供如下服务:

1, 自动创建相关数据库表;

2, 维护权限、角色、给用户授权,整套后台程序以及前台界面;

3, 提供权限认证 API ,供业务系统调用。

开发者只要在业务方法里面调用 API 即可,不需要做任何程序开发。

 

权限界面及常量导出

权限维护界面:树形结构

 

 

权限定义维护界面:输入项参数

 

 

常量导出界面:导出定义的权限,开发者将这些常量放入自定义的常量类里面,方便以常量的形式引用各种权限。

 

其他界面

其他管理界面,创建角色、给角色分配权限,给用户分配权限。这些没有什么特殊之处,仅贴出给角色分配权限界面,其他不再多说了。

给角色分配权限界面:


API

就功能权限方面, Metadmin 提供如下 2 API

MetadminService 类:

static boolean

hasPrivilege (int privilegeId, User  user) 
          判断指定用户是否拥有指定的权限

 

WebMetadminService 类,更方面给 WEB 程序调用的,自动从 req 里面读取用户:

static boolean

hasPrivilege (HttpServletRequest req, int privilegeId) 
          判断指定用户是否拥有指定的权限

 

完整 API 可在线浏览: http://www.metadmin.com/doc/javadoc/index.html

Metadmin 对于应用安全的考虑

细心的读者,肯定会问:

1, 给用户分配角色是业务管理职责,创建角色、权限,维护角色、权限关系是系统管理员职责。这样笼统的提供一个界面,让大家都能使用,这种做法不可取。

2, 即便是给用户分配角色,不同业务管理员可以分配的用户范围是不同的。

 

是的, Metadmin 对此持有相同看法。为此, Metadmin 预定义了 3 个权限:角色管理、给用户分配角色和策略管理三种角色。

如图示:


 

拥有“角色管理”权限的用户,可以增加、删除、修改角色,维护角色拥有的权限;

拥有“给用户分配角色”权限的用户,可以管理用户具有的角色。至于该用户能够查看到哪些用户, Metadmin 也预留了控制功能。如何控制在此暂时不表。

拥有“策略管理”权限的用户,能够进行细粒度权限管理工作,制定权限策略。如何制定权限策略,以后章节会逐步介绍。

 

为了让对 Metadmin 界面访问权限生效,还需要对 web.xml 进行修改。将 secured 参数值由 false 改为 true

如图示:

2
0
分享到:
评论
1 楼 soft_xiang 2010-10-25  
图出不来了

相关推荐

    基于springmvc+shiro的权限项目

    基于springmvc+shiro的权限项目,实现了基于用户的授权 角色的授权 ,对用户 角色 资源能进行CRUD操作,同时实现了细粒度的基于按钮的权限验证

    SpringSecurity动态加载用户角色权限实现登录及鉴权功能

    主要介绍了SpringSecurity动态加载用户角色权限实现登录及鉴权功能,很多朋友感觉这个功能很难,今天小编通过实例代码给大家讲解,需要的朋友可以参考下

    Java项目:客户关系管理系统(java+SSM+Layui+Shiro+Redis+mysql)

    用户管理 日志管理 权限管理 角色管理 系统信息 客户管理 我的客户 联系跟进 客户流失 销售机会 客户服务 我的服务 服务统计 客户关怀 统计 个人中心 环境需要 1.运行环境:最好是javajdk1.8,我们在这个平台上运行...

    基于SSM开发的客户关系管理系统.zip

    基于角色的权限访问控制RBCA(Role-Based Access Control) Spring+Springmvc+Mybatis三大框架 Ajax技术 springmvc文件上传 shiro安全框架 Redis缓存 JavaMail邮件 基于aop切面的日志管理 Layui前端框架 登录验证码 ...

    基于SpringBoot+Mybatis Plus+Shiro+mysql+redis智慧云智能教育平台

    开发语言:JAVA 数据库:MySQL5.7以上 开发工具:IDEA/Vscode 基于 SpringBoot + Mybatis + Shiro + mysql + redis构建的智能云教育平台。...6、RBCA权限管理:主要包括用户管理、角色管理、权限管理。

    Java智慧云智能教育平台源码 前后端分离

    基于 SpringBoot + Mybatis + Shiro + mysql + redis构建的智能教育平台。架构上使用完全前后端分离。 支持多种题型:选择题、多选题、判断题、填空题、综合题以及数学...RBCA权限管理:主要包括用户、角色、权限

    Java+vue前后端分离智慧云智能教育平台源码

    基于 SpringBoot + Mybatis + Shiro + mysql + redis构建的智能教育平台。架构上使用完全前后端分离。 支持多种题型:选择题、多选题、判断题、填空题、综合题以及数学公式...RBCA权限管理:主要包括用户、角色、权限

    基于SSM实现的客户关系管理系统+数据库+项目说明(毕设项目).zip

    基于角色的权限访问控制RBCA(Role-Based Access Control) Spring+Springmvc+Mybatis三大框架 Ajax技术 springmvc文件上传 shiro安全框架 Redis缓存 JavaMail邮件 基于aop切面的日志管理 Layui前端框架 登录验证码 ...

    论文研究-一种结合身份加密技术的RBCA系统设计 .pdf

    一种结合身份加密技术的RBCA系统设计,高超,,基于角色的访问控制(RBAC)是目前主流的访问控制模式,它比传统的自主访问控制和强制访问控制更优越,同时也提供了更高的灵活性��

    基于Django框架的权限组件rbac实例讲解

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

    基于SSM客户关系管理系统+源代码+文档说明

    基于角色的权限访问控制RBCA(Role-Based Access Control) spring+springmvc+mybatis三大框架 Ajax技术 springmvc文件上传 shiro安全框架 redis 缓存 JavaMail邮件 Springmvc 基于aop切面 的日志管理 Layui 前端...

    crm:基于SSM客户关系管理系统,来源:https

    客户关系管理系统系统开发环境操作系统:Windows 7集成开发工具:Eclipse EE 4.7编译环境:JDK 1.8 Web服务器:Tomcat 9.0系统框架spring框架springmvc框架mybatis框架Logback日志框架安全验证框架maven框架layui...

    CRM:基于SSM开发的客户关系管理系统

    客户关系管理系统系统开发环境以及版本操作系统:Windows_7集成开发工具:Eclipse EE_4.7编译环境:JDK_1.8 Web服务器:Tomcat_9.0数据库:MySQL_5.7.23系统框架spring框架springmvc框架mybatis框架Logback日志框架...

    基于SSM开发的客户关系管理系统+源代码+文档说明+数据库

    基于角色的权限访问控制RBCA(Role-Based Access Control) Spring+Springmvc+Mybatis三大框架 Ajax技术 springmvc文件上传 shiro安全框架 Redis缓存 JavaMail邮件 基于aop切面的日志管理 Layui前端框架 登录验证码 ...

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

    RBAC的理论模型与一个典型设计实现。用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)、用户角色表(UserRole)、角色菜单表(RoleMenu)

    基于SSM客户关系管理系统(java)

    基于角色的权限访问控制RBCA(Role-Based Access Control) spring+springmvc+mybatis三大框架 Ajax技术 springmvc文件上传 shiro安全框架 redis 缓存 JavaMail邮件 Springmvc 基于aop切面 的日志管理 Layui 前端...

Global site tag (gtag.js) - Google Analytics