PHP使用位运算符控制权限
位运算符在实际应用中可以做用户权限的应用
我这里说到的权限管理办法是一个普遍采用的方法,主要是使用到”位运行符”操作,& 位与运算符、| 位或运行符。参与运算的如果是10进制数,则会被转换至2进制数参与运算,然后计算结果会再转换为10进制数输出。
它的权限值是这样的
2^0=1,相应2进数为”0001″(在这里^我表示成”次方”,即:2的0次方,下同)
2^1=2,相应2进数为”0010″
2^2=4,相应2进数为”0100″
2^3=8,相应2进数为”1000″
要判断一个数在某些数范围内就可以使用 & 运算符(数值从上面的表中得来)
如:7=4|2|1 (你也可以简单理解成7=4+2+1)
用 & 来操作,可以知道7&4、7&2、7&1都是真的,而如果7&8则是假的
&、| 不熟悉的就要去查查手册,看看是怎么用的了
下面来看例子吧:
$perArr = array( 'read' => 1<<0,//2^0 'write' => 1<<1,//2^1 'excute' => 1<<2,//2^2 'delete' => 1<<3,//2^3 'manage' => 1<<4,//2^4 ); $str = $perArr['read'] | $perArr['write'];// 3 = 1 + 2 // echo $str | $perArr['excute'];die; $manageMark = $perArr['read'] | $perArr['write'] | $perArr['excute'] | $perArr['delete']; $adminMark = $perArr['read'] | $perArr['write'] | $perArr['excute'] | $perArr['delete'] | $perArr['manage']; //总权限 $mark = 0; foreach ($perArr as $m){ $mark = $mark | $m; } echo $mark;//31//根据权限位 获取当前权限信息 $arr = []; foreach ($perArr as $key=>$mark){ if($manageMark & $mark){ $arr[] = $key; } }
$arr = array(
'read','write','excute','delete'
);
OK,权限分值的这其中一个算法就是这样的,可以说是简单高效。也不知大家明白没有,不明白也没关系,记住例子就行了。前提就是做好权限值的分布,即那个1、2、4、8、16….(这里还有个顺序问题,越高级的权限就要越高的权限值,比如上面的例子所演示的删除权限)。有了权限分布表就可以确定给某个人什么权限了,你简单的理解成要哪个权限就加上相应的权限值吧。
这个方法很好用的,缺点就是如果权限分布得细的话,那么权限值会越来越大,你自己想想,2的几次方、如果所有的权限都要则是全部相加。不过对于一般的权限来说这个已经足够了。
参考链接:https://www.php.cn/php-weizijiaocheng-369689.html