PHP 权限管理 位运算

最近在搞一个权限管理,就是通过位或运算来验证权限,来分享一下实现原理。


权限管理,核心就是权限分配权限验证两点。

权限分配

用过linux系统的同学们应该都清楚,linux中文件的权限是怎么分配的。
我们为一个文件赋了755的权限,这个7(4+2+1)的权限是有rwx三个组成。

权限名 含义 代表数字
r 可读 4
w 可写 2
x 可执行 1

同样,我们的权限分配也可以采取这种方式去做,假设我们也有一些权限需要分配

权限名 含义 代表数字
index 展示数据 1
add 新增数据 2
edit 修改数据 4
del 删除数据 8

我们现在需要给用户分配权限,与上面linux的权限分配方式相同

用户名 权限 含义
张三 1 只有 index 权限
李四 3 (1+2)index+add 权限
王五 7 (1+2+4)index+add+edit 权限
赵六 11 (1+2+8)index+add+del 权限

这样,我们的权限基本分配完毕。

权限验证

位运算

权限验证的核心点就是位或运算,也就是‘丨’这个运算符,先把PHP官网位运算符解释贴出来。

例子 名称 说明
a &b And(按位与) 将把 a 和b 中都为 1 的位设为 1。
a 丨b Or(按位或) 将把 a 和b 中任一为 1 的位设为 1。
a ^b Xor(按位异或) 将把 a 和b 中一个为 1 另一个为 0 的位设为 1。
~ $a Not(按位取反) 将 $a 中为 0 的位设为 1,反之亦然。
a <<b Shift left(左移) a 中的位向左移动b 次(每一次移动都表示“乘以 2”)。
a >>b Shift right(右移) a 中的位向右移动b 次(每一次移动都表示“除以 2”)。

下面就开始权限验证的代码

模拟一下场景:

    

你可能感兴趣的:(PHP 权限管理 位运算)