关于RBAC(Role-Base Access Control)的理解(转)
基于角色的访问控制(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)的理解(转)的更多相关文章
- Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role
<Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic ...
- RBAC(Role-Based Access Control,基于角色的访问控制)
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- RBAC(Role-Based Access Control)基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- 关于RBAC(Role-Base Access Control)的理解
基于角色的访问控制(Role-Base Access Control) 有两种正在实践中使用的RBAC访问控制方式:隐式(模糊)的方式和显示(明确)的方式. 今天依旧有大量的软件应用是使用隐式的访问控 ...
- RBAC(Role-Based Access Control)
http://hi.baidu.com/akini/blog/item/eddbd61b90f6d4fbae513371.html RBAC 求助编辑百科名片 基 于角色的访问控制(Role-Base ...
- Azure ARM (17) 基于角色的访问控制 (Role Based Access Control, RBAC) - 自定义Role
<Windows Azure Platform 系列文章目录> 在上面一篇博客中,笔者介绍了如何在RBAC里面,设置默认的Role. 这里笔者将介绍如何使用自定的Role. 主要内容有: ...
- 权限控制-RBAC(Role-Based Access Control)
RBAC是基于角色的权限访问控制,在RBAC中角色与权限相连,用户通过成为某个角色而得到角色的权限,这就极大的简化了权限的管理,用户和角色多对多,角色和权限多对多,由此产生用户表.角色表.权限表,用户 ...
- [认证授权] 6.Permission Based Access Control
在前面5篇博客中介绍了OAuth2和OIDC(OpenId Connect),其作用是授权和认证.那么当我们得到OAuth2的Access Token或者OIDC的Id Token之后,我们的资源服务 ...
- 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 ...
随机推荐
- .NET源码中的链表
.NET中自带的链表是LinkedList类,并且已经直接实现成了双向循环链表. 其节点类LinkedListNode的数据结构如下,数据项包括指示到某个链表的引用,以及左,右节点和值. public ...
- ajax读取txt文本时乱码的解决方案
前言:第一次学习使用 ajax 就是用来读取文本 先给出现乱码的代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/ ...
- c# 封装Dapper操作类
using Dapper; using DapperExtensions; using System.Collections.Generic; using System.Configuration; ...
- C# 循环语句 for
循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变. for格式 for(初始条件;循环条件;状态改变) { 循环体 } break ——中断循环,跳出整个循环 continu ...
- 【RabbitMQ】3、win7下安装RabbitMQ
RabbitMQ依赖erlang,所以先安装erlang,然后再安装RabbitMQ; erlang,下载地址:http://www.erlang.org/download RabbitMQ,下载地址 ...
- 【开发工具之eclipse】7、eclipse代码自动提示,eclipse设置代码自动提示
首先打开Eclipse开发软件,然后在工具栏的[Window],点击后找到弹出列表中的[Preferences]选项,然后点击这个选项 现在弹出的窗口就是JAVA开发人员常见的设置窗口了,我们依次 ...
- ServiceFramework作为Java Web框架都有哪些不错的设计
前言 最近需要开发一个纯API的项目,mlsql-cluster,从无到有,到最后完整的proxy功能开发完毕,只花了四个小时不到,自己不尽小感叹了一把 ServiceFramework的高效. 关于 ...
- Linux常用基本命令:三剑客命令之-awk 三元表达式
awk 3元表达式,if...else结构都可以用3元表达式改写 ghostwu@dev:~/linux/awk$ awk -v FS=":" '{ type=$3>=100 ...
- blfs(systemv版本)学习笔记-编译安装openssh软件包
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! openssh项目地址:http://www.linuxfromscratch.org/blfs/view/8.3/postlf ...
- SD从零开始67-70 后勤信息系统中的标准分析, 信息结构, 信息的更新规则, 建立统计数据
SD从零开始67 后勤信息系统中的标准分析 标准分析中的报表Reporting in Standard Analyses 标准分析为高质量的表达和分析LIS中的数据基础提供了大量的功能: 当你决定了一 ...