码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-01-25 14:11:20      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:else   ...   实践   一个   think   san   saas   大量   项目   

基于角色的访问控制(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)的理解(转)

标签:else   ...   实践   一个   think   san   saas   大量   项目   

原文地址:https://www.cnblogs.com/leodaxin/p/8350814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!