php多种权限,php系列(五)权限控制的思考

权限控制

说到权限控制,有人不明白为什么要单独设计权限模块,难道不能直接在代码里面直接写死一些权限的控制吗?

是的,确实可以,但是如果你需要更换权限的时候不改动代码的话,那你就需要好好设计一下权限这个模块。

权限控制的三要素:用户-用户组-节点,正是这3者之间扯不清的关系,形成了权限控制的复杂性。(注:节点:用户的任何的一个操作都被称为节点)

RBAC权限控制

很多人在做权限控制的时候习惯性的去使用RBAC这种方式:用户对应用户组,用户组对应节点,用户组拥有的权限即这个用户所有的权限。

这种方式有个比较明显的缺点:

颗粒太粗:权限控制只能到分组,当管理员组下面有100个用户,这100个用户需要根据每个用户的积分值情况再分配不同的权限,那这个就很难实现。

RBAC的这种缺陷,我们的auth权限控制可以弥补!

AUTH权限控制的优势

粒度很细:能在分组下再根据用户的一些属性进行权限的分配。

先来看看RBAC的表设计

用户表:

用户名称 积分

小明 188

小红 233

小花 92

用户组表:

用户组名称

一级管理员组

二级管理员组

三级管理员组

超级管理员组

节点表:

节点说明 节点名称

抽奖 activity/chou

抢红包 activity/qiang

砸金蛋 activity/za

用户组与节点关系表:

用户组 权限

管理员组 抽奖,抢红包,砸金蛋

用户与用户组关系表:

用户 用户组

小明 管理员组

RBAC的权限判断也很简单:

(1)根据用户得到用户组

(2)根据用户组得到节点

(3)判断需要验证的节点是否在用户所拥有的节点列表中,在就有权限,不在就没有权限

再来看看AUTH的表设计

用户表:

用户名称 积分

小明 188

小红 233

小花 92

用户组表:

用户组名称

一级管理员组

二级管理员组

三级管理员组

超级管理员组

节点表:

节点说明 节点名称 附加规则

抽奖 activity/chou {score}>1 &&{score}<100

抢红包 activity/qiang {score}>100 &&{score}<200

砸金蛋 activity/za {score}>200 &&{score}<300

用户组与节点关系表:

用户组 权限

管理员组 抽奖,抢红包,砸金蛋

用户与用户组关系表:

用户 用户组

小明 管理员组

光看上面的表设计,其实我们可出看出两者的区别:

在节点表的设计中,auth比rbac多了一个附加规则的字段。

多了一个字段也就多了一个判断,AUTH权限判断步骤如下:

(1)根据用户得到用户组

(2)根据用户组得到节点

(3)判断需要验证的节点是否在用户所拥有的节点列表中,在的话进行步骤4的判断,不在的话直接提示没有权限

(4)如果有附件条件,再判断下用户的属性是否符合附加条件,符合才返回符合权限,否则返回没有权限。

关于condition条件的判断代码实现的逻辑

前面我们看到节点表里面,多加了一个condition字段,这个字段的写法是{score}>100 &&{score}<200,我们在权限判断的时候,先用正则替换的方式将这句话变成$user['score']>100&&$user['score']<200,然后用eval函数执行这段话,然后记录这个语句的返回值true/false来作为判断是否有权限的依据。

AUTH权限控制存在的不足

由于AUTH权限的节点表设计的时候多加了一个condition字段,对节点进行验证的时候,比如有一个节点是审核操作,condition是score>100,如果需求是用户是初级管理员组必须score>100才能进行审核操作,而高级管理员组却可以直接进行审核操作,那么对于这种权限控制,auth也无法控制,因为多个组共享了一个节点的condition。

关于权限控制,如果大家有好的操作方式,一起探讨。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值