RBAC模型

1.在RBAC模型中,有以下几个重要的概念
  • 资源(Resource):可以被标识的一切事物,例如web中用url标识的都可以称为资源,操作系统中被路径标识的文件资源。
  • 权限(Permission):操作+资源(标识)
  • 用户(User):权限的实际行使者或主体
  • 角色(Role):一系列权限的集合体

所谓的用户权限控制我想可以用这样一句简练的语句来表达吧:Who对What进行了How的操作。而很明显,Who就是用户,What就是资源,How就是操作了。
但是一般情况下用户是不会直接操作资源的,而是先成为了某种角色之后再操作资源,这时候社会更加有序。不然人人都可以对所有资源进行任何的操作,那就乱套了。
而往往,角色操作资源也是有限制的,也就是什么角色只能对什么资源作什么操作。这些也都是有规定的。
我想,这就是所谓的用户权限了吧。

既然有必要通过控制权限来维持秩序,那么权限控制必将是一门需要花心思研究的学问。
在我看来,如何抽象(或定义)“权限”是最重要的。

权限是什么?权限就是操作加上资源,在Web系统里来说,就是:权限 = Http方法+URL。
当然,这只是我的理解。

在设计的时候,需要理清RBAC模型中那些不同概念之间的关系。
  • 用户和角色是多对多的关系
  • 角色和权限也是对对多的关系
  • 权限和(资源)URL+操作是一种组合关系,权限不能脱离资源和操作而独立存在。


下面,我尝试使用ER图和Java类图来表示它们的关系。
  • 表:User(id,name)、Role(id,name)、Permission(id,operationId,url)、Operation(id,name);
  • 多对多关联表:UserRole(id,uid,rid)、RolePerm(id,rid,pid)


试试给出这样一个应用场景:
当前系统含有两个用户:UserA、UserB
两种角色:Role1、Role2
一个资源:News(新闻资源)
对资源的操作有:查看GET,添加POST,删除DELETE,修改PUT
标志资源的url格式:
http://localhost/news
http://localhost/news/new
http://localhost/news/{id}
http://localhost/news/{id}/edit
对以上的url添加上操作就能定义出一系列的权限:

查看新闻列表权限:http://localhost/news + GET
添加新闻内容权限:http://localhost/news + POST
查看某篇新闻内容权限:http://localhost/news/{id} + GET
删除谋篇新闻权限:http://localhost/news/{id} + DELETE
修改谋篇新闻内容:http://localhost/news/{id} + PUT

当然,上面定义权限的过程完全是可由开发者在系统设置里进行定义。这里要说明的是:不一定所有的url都需要被定义为权限,当系统需要对外提供url服务时,才有必要将其定义为权限。
你一定知道一个url没有被定义成权限时它根本就没法被使用。我们需要保证这点。例如我们可以通过隐藏菜单的方式来表达某个url没有被定义成权限。当然,这仅仅是其中一种方法而已。

试想一下:
我们使用管理员账号登陆系统后台,点击“权限管理”—>“新增权限”,然后页面显示一个url列表,我们选中某个url,然后分配操作(GET、POST、DELETE、PUT)给它,接着点击保存为"权限",这时候系统把我们选中的url加上操作保存到Permission表中,并告诉我们保存成功了。这时候我们就完成了一次权限定义的操作!
接下来,我们点击“角色管理”—>“分配权限”,页面将显示一个角色列表和一个权限列表,我们选中某个角色,然后再选中某个权限(当然可以选择多个权限),接着点击"保存",系统将为我们保存到RolePerm表,并通知我们成功了,这时候我们就完成了一次权限分配的操作。
最后,我们点击“用户管理”—>“分配角色”,有点类似以上的过程,总之最后我们肯定完成了一次分配角色给用户的操作。

以上的假想过程,就完成了一次用户权限管理操作了。这时候,使用某个被赋予某种角色的用户账号进行登录,点击任何一个按钮或者在浏览器中访问任何一个url,我想系统都应该会对其进行权限判断,从而保证系统的安全之类的。

本文来自:http://www.iteye.com/topic/1112793

更多的了解可参考:http://hi.baidu.com/akini/blog/item/eddbd61b90f6d4fbae513371.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值