2016-11-17 13:29:10 3061次浏览 3条回答 0 悬赏 50 金钱

我举个例子,比如用户分为三种,一种普通用户,一种实名用户,一种高级用户。
普通用户只能创建个文章。
实名用户可以创建新闻。
高级用户可以使用网站皮肤。
如果我不用rbac,我可以设置一个字段,1是普通,2是实名,3是高级。执行action的时候我判断这个字段的值,不一样达到了权限控制了吗?
请问rbac有何高明之处?

  • 回答于 2016-11-17 16:48 举报

    1是普通,2是实名,3是高级。执行action的时候我判断这个字段的值

    那如果,作为普通(1),有20个Controller,100个action,你是要在这100个action中每一个都判断,if(xx=1){}吗?然后我突然多了一个“4是vip”,你又一个一个action去判断吗?作为普通的,应要求,100个action有30个不能访问,又一个一个去修改?

    在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。
    首先角色,普通、实名、高级 这就是角色
    然后权限,你的action就是权限。

    rbac你可以这么理解,你用户表设置一个字段,然后关联到角色表(普通、实名、高级)的id,然后这个角色拥有那些权限,就是action集合,那么,你只需要在一个地方,获取他的角色,然后找到对应的权限集,判断当前这个访问是否在这个集合里面,如果包含在集合里面说明有权限访问,如果不在集合里面,说明没权限访问。你要操作的,只需要给这个角色,增加或者删除对应的action即可。

  • 回答于 2016-11-17 20:30 举报

    你这不就是rbac的简化变种嘛、
    rbac就是已经实现了调用前的判断、权限的个性化定制。
    你可以在rbac的轮子上直接造车,也可以从头造轮子。

    2 条回复
    回复于 2017-01-14 10:12 回复

    rbac 如何做到数据层的权限控制?
    现有的权限都是,例如先让人进来在看这个人能做什么。而不是先看这个人能做什么在决定让不让他进来。

    回复于 2017-01-15 16:19 回复

    这个进来是指哪个步骤?现在的权限控制,不是在进入action之前判断么。

  • 回答于 2016-11-20 12:38 举报

    rbac的全拼是Role-Based Access Control,也就是基于角色的权限控制,在楼主举的例子中,其实已经有这个思想在里边了:

    • 普通用户实名用户高级用户分别对应三种权限
    • 创建文章创建新闻使用网站皮肤分别对应三种权限
    • 不同角色的用户有着不同的权限

    在你举的例子中,角色与权限是一对一的关系,但在实际使用中,一般是一对多的关系。说白了,rbac的组件呢就是用来实现这种一对多的权限控制的。

您需要登录后才可以回答。登录 | 立即注册
数字派
总监

数字派 北京

注册时间:2016-04-19
最后登录:2023-03-07
在线时长:52小时34分
  • 粉丝10
  • 金钱1515
  • 威望10
  • 积分2135

热门问题