首先,白话一下RBAC模型。RBAC是基于角色的访问控制(Role-Based Access Control)的简称。RBAC认为权限授权实际上是Who、What、How的问题。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What进行How操作”。至于RBAC模型具体包含哪些内容,网上有很多相关的资料,可以参考一下。下面,主要写写自己对RBAC的理解和在Xianfeng平台中的应用。

理解RBAC,还是从““Who对What进行How操作”出发,Who实际上就是功能操作的主体,可以理解为系统用户,而What实际上就是功能操作的客体,范围比较广泛,可以是系统菜单,也可以是功能页面或者系统中的文件等等,称之为用户可操作的系统资源,而How实际上就是对具体功能操作的一种抽象表示,比如把增加用户的功能操作抽象表示为“新增用户”。通过这样简单的理解,很容易把RBAC模型和我们实际开发的系统联系起来。

实现权限控制的步骤大体分为以下几步:

(1)建立系统用户和系统资源之间的权限映射关系;

(2)对用户访问的关键资源进行权限过滤;

(3)反馈用户权限过滤的结果

1、建立系统用户和系统资源之间的权限映射关系

涉及到的实体如下:

模块(Module):实现系统功能的模块化划分,比如子系统等;

功能(Function):一个完整的业务过程,比如用户管理等;

操作(Operation):业务过程所包含的关键业务点,比如用户管理的新增、修改、删除等,

资源(Resource):功能操作的客体,比如系统菜单,文件等;

用户(User):功能操作的主体,既登录系统的用户;

角色(Role):可以认为是操作集合的另外一种表示方法,通过给用户分配角色来确定用户有权限的操作范围。

实体关系模型如下图所示:

用户(User)和操作(Operation)、操作(Operation)和资源(Resource)之间的关系为弱化关系,既可有可无的关系,简单实现方法可以忽略这种弱化关系的存在。

简单来看,给用户和资源之间建立权限映射关系,实际上就是确定用户有哪些角色。



2、对用户访问的关键资源进行权限过滤

以一个具体的业务场景为例,有一个管理功能页面,页面上包含“新增”、“修改”、“删除”3个按钮,假设此页面只有管理员可访问,并且只有超级管理员才有按钮操作权限。

从假设的业务场景得知,管理功能具有4个操作,包含查询、新增、修改和删除,管理员具有查询权限,而超级管理员还具有新增、修改和删除的权限。

功能页面,属于系统资源,可以使用页面的URL作为权限过滤的标识符,因为在一个系统中,URL总是唯一的,另外,页面上的操作按钮,也属于系统资源,为了实现权限过滤,必须绑定一个唯一的权限过滤标识符,可以通过扩展HTML属性的方式来绑定唯一的权限过滤标识符,示例如下:

<button safeURI="system.user@insert" onclick="insertRow()">新增</button>

其中,safeURI属性的值“system.user@insert"就表示系统增加用户操作的唯一权限过滤标识符。

无论是管理员,还是超级管理员,只要对系统中的关键资源进行访问,根据其角色关联的操作集合,遍历出是否包含当前资源的权限过滤标识符,就可以判断有无权限进行当前操作,从而实现权限控制。

3、反馈权限过滤的结果

对系统关键资源进行权限过滤之后,如果当前登录用户具有操作权限,就继续用户操作;反之,如果当前登录用户没有操作权限,需要返回无操作权限的结果给用户。

Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理的更多相关文章

  1. Xianfeng轻量级Java中间件平台:权限管理

    权限管理:是通过系统对用户的行为进行控制的一套业务规则,可以做得很简单,比如通过硬编码的方式进行控制,也可以做得很复杂,比如通过一些复杂的权限模型去实现一些复杂的权限控制,比如菜单访问权限.按钮操作权 ...

  2. Xianfeng轻量级Java中间件平台:一期开发计划

    关于Xianfeng轻量级Java中间件平台,考虑到需要控制开发周期,通过分期开发的方式来实现一些基础的.常用的功能,这样有利于跟踪开发计划.一期的开发计划,主要实现的目标如下: 系统架构: 1.确定 ...

  3. Xianfeng轻量级Java中间件平台:菜单管理

    通过菜单管理,可以实现系统菜单的权限控制.用户个性化菜单功能等,当然很多系统支持在线开发,不用专门的开发工具编写代码,通过一些简单的设置就能开发出新的功能,有新功能增加到系统中,菜单管理功能也是必不可 ...

  4. Xianfeng轻量级Java中间件平台:流水号管理、组织机构管理

    流水号管理:现实中,经常都会和流水号打交道,至于什么是流水号,简而言之,就是按照特定格式要求产生的一个号码,并且总是按照递增的规则生成的,对于要求比较高的业务,需要流水号是连续的,比如移动营业厅排号小 ...

  5. Xianfeng轻量级Java中间件平台:用户管理

    用户管理:简单地说,就是管理系统用户的账号信息.在典型的业务系统中,用户管理往往不包含用户隶属组织机构相关属性(比如部门.岗位等)的维护,而是由组织机构管理专门去维护.因此在用户管理的功能中,主要就维 ...

  6. Xianfeng轻量级Java中间件平台:功能管理

    功能管理:从功能类型来看,不属于用户使用的功能,而属于系统维护使用的功能,因为对于用户来说,是不可见的.功能管理的作用是定义一套规则,用来处理权限等业务,比如常见的菜单权限控制.按钮权限控制等情景 在 ...

  7. Xianfeng轻量级Java中间件平台:属性管理、字典管理

    属性管理:主要功能是维护一些系统定义的.业务定义的属性数据,至于属性是什么,简单的说就是由键key和值value组成的数据,属性查询列表页面如下: 表格实现了直接编辑的功能 字典管理:主要功能是维护一 ...

  8. 基于RBAC模型的权限系统设计(Github开源项目)

    RBAC(基于角色的访问控制):英文名称Rose base Access Controller.本博客介绍这种模型的权限系统设计.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来 ...

  9. 基于RBAC模型的权限设计:如何设计系统权限体系?

    一.什么是RABC RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限(如下图),从而 ...

随机推荐

  1. 自定义 Django的User Model,扩展 AbstractUser类注意事项

    本篇主要讨论一下User Model的使用技巧. 注意, 由于Django 1.5之后user model带来了很大的变化, 本篇内容只针对django 1.5之后的版本. 1. 确定 User Mo ...

  2. Linux各个文件夹的作用~~~非常实用!!

    linux下的文件结构,看看每个文件夹都是干吗用的/bin   二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录 ...

  3. Error: failure: repodata/repomd.xml from fedora: [Errno 256] No more mirrors to try.

    记录一个小问题,重新买的linux换yum源的时候一直提示: Error: failure: repodata/repomd.xml ] No more mirrors to try. 一直说那个XM ...

  4. 大数据 -- Spark

    Spark体系架构 zhuangzai Spark体系架构包括如下三个主要组件: 数据存储 API 管理框架 接下来让我们详细了解一下这些组件. 数据存储: Spark用HDFS文件系统存储数据.它可 ...

  5. C#2.0 Socket套接字编程之实例初探 200

    首先从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来连接,服务程序等待客户的连接信息,一旦连接上之后,就可以 ...

  6. 如何在CentOS或者RHEL上启用Nux Dextop仓库 安装shutter截图工具

    Nux Dextop是一个面对CentOS.RHEL.ScientificLinux的含有许多流行的桌面和多媒体相关的包的第三方RPM仓库(比如:Ardour,Shutter等等).目前,Nux De ...

  7. jython 2.7.1 版本开发历史

    很多技术一直感兴趣,在工作中没有太多实践的机会,但可以持续关注.Jython最初是Python on JVM,所以最初的名称是JPython,后续由于基于JVM可以有更多可能性,名字改为Jython. ...

  8. [watchdog]内核失败的重启方案

    1 在内核中配置看门狗驱动Linux-2.6.32.2 内核具有完善的S3C2440 的看梦狗驱动,我们只需配置一下就可以使用了.在内核源代码目录执行:make menuconfig,进入内核配置主菜 ...

  9. TCP粘包, UDP丢包, nagle算法

    一.TCP粘包 1. 什么时候考虑粘包 如果利用tcp每次发送数据,就与对方建立连接,然后双方发送完一段数据后,就关闭连接,这样就不会出现粘包问题(因为只有一种包结构,类似于http协议,UDP不会出 ...

  10. keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72885715 人脸识别热门,表情识别更加.但是表情识别很难,因为人脸的微表情很多,本节 ...