基于角色的访问控制(Role-Base Access Control)

有两种正在实践中使用的RBAC访问控制方式:隐式(模糊)的方式和显示(明确)的方式。

今天依旧有大量的软件应用是使用隐式的访问控制方式。显示的访问控制方式更适合于当前的软件应用。

隐式的访问控制

隐式的访问控制就是并没有给角色添加具体权限操作,只是给访问的用户添加了一个标识,告诉系统我是隶属于这个角色的,只要系统允许这角色操作的资源,我就有权限去操作。

比如说,我现在某个系统有两个角色,分别是“超级管理员”,"项目管理员",“普通用户”;

用户有: root 、zhangSan;

分别给上面三个用户赋予角色:root  赋予 “超级管理员” 角色 / zhangSan 赋予 “普通用户” 角色

那么我现在有一个修改用户密码的功能,这个功能只能是“超级管理员”角色的用户才能操作,那么隐式访问控制的具体代码将会是如下:

if( currentUser.hasRole("超级管理员")){
//有权限进行操作
}else{
//没有权限进行操作
}

上面这段代码说的是,如果当前访问用户对象隶属于“超级管理员”这个角色,那么有权限进行修改用户密码操作,否则没有权限进行操作。

这种权限操作是没有明确告诉系统这个角色可以干什么,而是程序员知道这个角色能干吗,靠if else在程序中进行判断这些角色能干吗。

如果此时增加一个“普通用户”也可以修改用户密码的权限,那么此时代码就应该改成如下:

if( currentUser.hasRole("超级管理员") || currentUser.hasRole("普通用户")){
//有权限进行操作
}else{
//没有权限进行操作
}

这样的权限管理不太好,仅仅是因为一个微小的权限方面的需求变动,就需要改动代码,重新编译、部署...

如果又让项目管理员也有这样的权限的话,又得修改了。。。

所以,推荐下面的显式的访问控制。

显式的访问控制

显式的访问控制是明确的告诉系统这些角色具体能干吗,让隶属于这个角色的用户都拥有相应的权限。

如:“超级管理员”{“创建用户”,“修改用户密码”,“删除用户”}的权限

那么修改用户密码的代码就该如下所示:

//获取当前用户的角色,再通过角色来判断是否有“修改用户密码的权限”
if( currentUser.getRole().isPermission("修改用户密码")){
//有权限进行操作
}else{
//无权限进行操作
}

假设我要去除掉超级管理员的“修改用户密码”的权限,那么我只需要修改权限的配置文件,而不需要修改代码部分。

所以,推荐使用显式访问控制。

参考资料:http://www.thinksaas.cn/group/topic/150841/

关于RBAC(Role-Base Access Control)的理解的更多相关文章

  1. Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role

    <Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic ...

  2. RBAC(Role-Based Access Control,基于角色的访问控制)

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

  3. RBAC(Role-Based Access Control)基于角色的访问控制

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

  4. 关于RBAC(Role-Base Access Control)的理解(转)

    基于角色的访问控制(Role-Base Access Control) 有两种正在实践中使用的RBAC访问控制方式:隐式(模糊)的方式和显示(明确)的方式. 今天依旧有大量的软件应用是使用隐式的访问控 ...

  5. RBAC(Role-Based Access Control)

    http://hi.baidu.com/akini/blog/item/eddbd61b90f6d4fbae513371.html RBAC 求助编辑百科名片 基 于角色的访问控制(Role-Base ...

  6. Azure ARM (17) 基于角色的访问控制 (Role Based Access Control, RBAC) - 自定义Role

    <Windows Azure Platform 系列文章目录> 在上面一篇博客中,笔者介绍了如何在RBAC里面,设置默认的Role. 这里笔者将介绍如何使用自定的Role. 主要内容有: ...

  7. 权限控制-RBAC(Role-Based Access Control)

    RBAC是基于角色的权限访问控制,在RBAC中角色与权限相连,用户通过成为某个角色而得到角色的权限,这就极大的简化了权限的管理,用户和角色多对多,角色和权限多对多,由此产生用户表.角色表.权限表,用户 ...

  8. [认证授权] 6.Permission Based Access Control

    在前面5篇博客中介绍了OAuth2和OIDC(OpenId Connect),其作用是授权和认证.那么当我们得到OAuth2的Access Token或者OIDC的Id Token之后,我们的资源服务 ...

  9. Role-based access control modeling and auditing system

    A role-based access control (RBAC) modeling and auditing system is described that enables a user to  ...

随机推荐

  1. hdu 1195 Open the Lock (BFS)

    Open the Lock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  2. JAVA本地文本读取---解决中文乱码

    import java.io.*; public class ReadFile { public static void main(String[] args) { try { File file = ...

  3. 3.6 Lucene基本检索+关键词高亮+分页

    3.2节我们已经运行了一个Lucene实现检索的小程序,这一节我们将以这个小程序为例,讲一下Lucene检索的基本步骤,同时介绍关键词高亮显示和分页返回结果这两个有用的技巧. 一.Lucene检索的基 ...

  4. linux命令Netstat

    1.需求 了解Netstat命令 2.简介 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multi ...

  5. 原生js提取非行间样式

    js用style属性可以获得html标签的样式,但是不能获取非行间样式,如何获取css的非行间样式呢,在低版本ie我们可以用currentStyle,在其他浏览器我们可以用getComputedSty ...

  6. Android wifi驱动的移植 realtek 8188

    Android wifi驱动的移植 一般我们拿到的android源代码中wifi应用层部分是好的, 主要是wifi芯片的驱动要移植并添加进去. wifi驱动的移植, 以realtek的8188etv为 ...

  7. 给Input type='date'赋值

    (如有错敬请指点,以下是我工作中遇到并且解决的问题) 需要使用AngularJS动态给<input type="date" />赋值. 我使用的是ng-bind=&qu ...

  8. Selenium2+python自动化4-Pycharm使用【转载】

    前言 在写脚本之前,先要找个顺手的写脚本工具.python是一门解释性编程语言,所以一般把写python的工具叫解释器.写python脚本的工具很多,小编这里就不一一列举的,只要自己用着顺手就可以的, ...

  9. hdu 5124(区间更新+单点求值+离散化)

    lines Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  10. typescript项目配置路径别名(路径映射)

    在vue项目中,我们可以利用“@”来指代src目录,在普通webpack项目中,我们也可以通过配置webpack的config来指定路径别名,但是在typescript+webpack项目中我们该怎么 ...