zoukankan      html  css  js  c++  java
  • Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理

    首先,白话一下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、反馈权限过滤的结果

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

  • 相关阅读:
    STM32.ADC
    电源方案集
    什么叫二级域名
    android驱动学习---led实验
    Get,Post和Head具体解释
    Android 编码规范
    VC:当前不会命中断点,还没有为该文档载入不论什么符号
    经常使用的结构体
    【Facebook的UI开发框架React入门之九】button简单介绍(iOS平台)-goodmao
    记录遇到的ios下的bugs[废弃]
  • 原文地址:https://www.cnblogs.com/wenlong/p/4070090.html
Copyright © 2011-2022 走看看