关于Rbac和Auth的区别,网上说法很多,可是我看来看去感觉两者没有什么区别,关于数据库的设计,整体的思想都是一样的。参考了一些资料,现在整理一下

我们在项目中通常需要实现: 对用户实现 节点或者一些按钮操作的权限控制

一、基本思想

传统的模型:用户---》权限

THINKPHP AUTH 和 RBAC

 

按照上面的设计,难道要我们对每个用户都单独赋予权限吧?那不现实

更何况在一个系统中,很多用户拥有相同权限,那我们是不是可以考虑给用户分类,同类用户赋予相同角色,再对角色进行赋权呢?

这就是rbac的基本思想

THINKPHP AUTH 和 RBAC

二、基本模型RBAC0

RBAC0是基础,很多产品只需基于RBAC0就可以搭建权限模型了。

在这个模型中,我们把权限赋予角色,再把角色赋予用户。用户和角色,角色和权限都是多对多的关系。用户拥有的权限等于他所有的角色持有权限之和

THINKPHP AUTH 和 RBAC

举例:

在做一个教育类产品管理中:用户有学生、家长、老师、园长等角色,如果按照传统模型,给每一个用户赋予权限会非常麻烦,也没法做到批量修改用户权限。

这时候,我们就可以抽象出来几个角色:学生角色、家长角色、园长角色等,并对角色进行授权,园长角色管理学校权限,老师角色具有发布作业权限等等。这样,以后添加一个新学生,只需要给用户绑定一个角色,就会自动关联上这个角色身上的权限。

如果他既是园长,又是老师,那他便关联了两个角色,自动关联上两种身份的权限。

不过,这个多角色的问题,得对项目需求进行具体的设计,可能会涉及到后面提到的RBAC2角色限制。

 

三、模型RBAC1 角色分层

RBAC1建立在RBAC0基础之上,在角色中引入了继承的概念。简单理解就是,给角色可以分成几个等级,每个等级权限不同,从而实现更细粒度的权限管理。

THINKPHP AUTH 和 RBAC

THINKPHP AUTH 和 RBAC

在上面角色设计中,提到了园长这个角色,但假如现在园长只是一个挂名的,其实什么事情都是副园长在操作,即副园长属于园长角色,但应该是拥有更多细致的权限。

所以我们可以考虑对角色进行分级,同一角色不同级别人员 拥有的权限不同。当然这和多添加一个副园长角色效果相同。

 

四、模型RBAC2 角色限制

RBAC2同样建立在RBAC0基础之上,仅是对用户、角色和权限三者之间增加了一些限制。

这些限制可以分成两类,即静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。具体限制如下图:

THINKPHP AUTH 和 RBAC

THINKPHP AUTH 和 RBAC

假如一个老师,想让自己的孩子到所任职的学校上学,那么这个老师就拥有了两个角色:家长,老师

角色互斥:老师角色需要布置作业,但是家长角色应该是提交学生的作业

解决方式:用户登录时,先进行身份的选择,再操作

 

五、统一模型RBAC3

RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分层,也包括可以增加各种限制。只有在系统对权限要求非常复杂时,才考虑使用此权限模型。

六、基于RBAC的延展——用户组

基于RBAC模型,还可以适当延展,使其更适合我们的产品。比如增加用户组概念,直接给用户组分配角色,再把用户加入用户组。这样用户除了拥有自身的权限外,还拥有了所属用户组的所有权限。

比如,我们可以把一个部门看成一个用户组,如销售部,财务部,再给这个部门直接赋予角色,使部门拥有部门权限,这样这个部门的所有用户都有了部门权限。

用户组概念可以更方便的给群体用户授权,且不影响用户本来就拥有的角色权限。

THINKPHP AUTH 和 RBAC

 

这个概念一直不太能理解,简单说下我的想法:

银行信用卡会有一些优惠活动,假设:角色V1的会员,每个会员日需要参与抽奖,才能有机会获得5元的优惠券;角色V2的会员,每个会员日能直接领取100-20的优惠券;角色VVIP的会员,每个会员日能直接领取100-50的优惠券。现在元旦节,感恩大回馈,所有的会员不论等级都可以参加抽奖,获得减免次年年会的优惠。

那我们要怎么实现呢?

1、增加一个角色,专门用来操作元旦抽奖?将所有的用户都关联上这个角色,显然不太现实

2、给每一个角色都增加这个元旦抽奖操作权限?如果有100个角色呢?感觉挺繁琐,如果以后这个活动取消了,还得一个个禁用?

那是不是可以抽象出来一个用户组,将所有已注册用户,添加到一个临时组。对这个组分配一个操作元旦抽奖的权限。

但说到这里,我就很疑惑了,还需要在设置一个角色,将用户组关联到角色,再对角色赋权?

THINKPHP AUTH 和 RBAC

还是直接对这个用户组分配权限?

THINKPHP AUTH 和 RBAC

其实在将用户添加到用户组的时候,也是需要批量操作的

但是如果 新增一个权限,将用户全部关联上这个新角色,也需要批量操作

我对于组的概念还是很模糊,感觉组和角色是一个意思啊?那THINKPHP Auth类 和 rbac 有什么不同呢?

确实也可以结合者使用,有没有大神给我讲解一下?

 

 

 

 

 

 

 

 

相关文章:

  • 2022-12-23
  • 2021-07-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-21
  • 2022-12-23
  • 2022-02-05
猜你喜欢
  • 2021-06-25
  • 2022-03-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-08
  • 2022-12-23
相关资源
相似解决方案