基于角色的访问控制(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. Fibonacci快速实现(优化)

    斐波那契数列的通俗解法是利用递推公式进行递归求解,我们可以更优化的去解决它. 方法一:通项公式 斐波那契数列的递推公式是f(n)=f(n-1)+f(n-2),特征方程为:x2=x+1,解该方程得(1+ ...

  2. oracle 外连接以及用on和where 的区别

    Oracle  外连接(OUTER JOIN)包括以下: 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUT ...

  3. oracle用户权限

    权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> ...

  4. 同源策略与CORS

    同源策略 同源策略是浏览器保护用户安全上网的重要措施,协议.域名.端口号三者相同即为同源. 不同源下,浏览器不允许js操作Cookie.LocalStorage.DOM等数据或页面元素,也不允许发送a ...

  5. JavaScript类继承

    和其他功能一样,ECMAScript 实现继承的方式不止一种.这是因为 JavaScript 中的继承机制并不是明确规定的,而是通过模仿实现的.这意味着所有的继承细节并非完全由解释程序处理.作为开发者 ...

  6. prototype、proto和constructor的三角关系

    转载整理自http://www.cnblogs.com/xiaohuochai/p/5721552.html#3760057 http://blog.csdn.net/jasonzds/article ...

  7. Ubuntu 切换键盘布局(colemak / workman / norman)

    首先找出所有可选的布局(layout)方案: $ man xkeyboard-config 可以看到 us 下有很多常见的布局方案(以下为节选): LAYOUTS ┌───────────────── ...

  8. python之继承

    1.经典MRO : 树形结构的深度遍历优先 - > 树形结构遍历 class A: pass class B(A): pass class C(A): pass class D(B, C): p ...

  9. Python 利用Python操作excel表格之xlwt介绍

    利用Python操作excel表格之xlwt介绍   by:授客 QQ:1033553122 直接上代码   案例1 #!/usr/bin/env python # -*- coding:utf-8 ...

  10. Linux 学习笔记之超详细基础linux命令 Part 5

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 4----------------- ...