基于角色的访问控制(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. 为什么js获取图片高度的值 都为0

    尼玛 这个问题困扰我好久~ 看别人取值都是 img.width 我取到的总是0: 终于发现取图片尺寸的时候 图片还没有加载完毕.所以在 <img id ='sImg' class='thumbI ...

  2. BZOJ 2458: [BeiJing2011]最小三角形 | 平面分治

    题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 ...

  3. hdu 6102 GCDispower

    多校6 GCDispower(容斥) 题意: 给一个长度为\(n\)的排列 给q组询问 每次查询\(L,R\)内的答案 \(\sum_{i=L}^{R}\sum_{j=i+1}^{R}\sum_{k= ...

  4. OpenCV 2.4.9 学习笔记(4)—— 像素类型与Templates的限制使用

    限制使用templates C++中的Templates使得接口机制非常好用,高效而且能够保证数据与算法的安全.但是过多地使用templates可能会增加计算时间和代码长度,有时候还能难区分接口和实现 ...

  5. 培训补坑(day1:最短路&two-sat)

    经过12天的滚粗,终于迎来了暑期培训的结尾啦QAQ 结业考才考了90分,真是对不起孙爷(孙爷请收下我的膝盖) orz小粉兔怒D rank 1 获得小粉兔一只QAQ 由于这次12天的培训题目又比较多,算 ...

  6. C++的Json解析库:jsoncpp和boost(转)

    原文转自 http://blog.csdn.net/hzyong_c/article/details/7163589 JSON(JavaScript Object Notation)跟xml一样也是一 ...

  7. VC版本与VS版本 对照表

    Microsoft Visual Studio 6.0                  VC6.0 Microsoft Visual Studio .NET 2002:          VC7.0 ...

  8. UVA 11125 Arrange Some Marbles

    dp[i][j][m][n][s]表示最初选择j个i号颜色大理石.当前选择n个m号颜色大理石.剩余大理石状态(8进制数状压表示)最开始没看出状压..sad #include <map> # ...

  9. Git-stash操作

    git stash git pull git stash pop git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容.由于可能存在多个Stash的内容,所以用栈来管 ...

  10. 自定义validate的效验规则 检验用户名是否存在

    <script type="text/javascript"> //自定义效验规则 $.validator.addMethod( //规则名称 "checkU ...