<?
//简化一下。使用数字变量,每个可容纳32个独立设置
//下面是测试例,应该很容易看懂
$b = "11111111111111111111111111111111"; // 32项权限,全1为所有权限
$a = bindec($b);
$a = $a & ~pow(2,8); // 取消第8项,以0开始:0-31
echo decbin($a)."<br>"; //11111111111111111111111011111111
$a = $a & ~(pow(2,7)|pow(2,4)|pow(2,14)|pow(2,24)); // 再取消第7、4、14、24项
echo decbin($a)."<br>"; //11111110111111111011111101101111
$a = $a + pow(2,24); // 设置第24项
echo decbin($a)."<br>"; //11111111111111111011111001101111
//判定是否有第30项权限
if($a & pow(2,30))
echo "yes<br>";
else
echo "no<br>";
//判定是否有第8项权限
if($a & pow(2,8))
echo "yes<br>";
else
echo "no<br>";?>
//简化一下。使用数字变量,每个可容纳32个独立设置
//下面是测试例,应该很容易看懂
$b = "11111111111111111111111111111111"; // 32项权限,全1为所有权限
$a = bindec($b);
$a = $a & ~pow(2,8); // 取消第8项,以0开始:0-31
echo decbin($a)."<br>"; //11111111111111111111111011111111
$a = $a & ~(pow(2,7)|pow(2,4)|pow(2,14)|pow(2,24)); // 再取消第7、4、14、24项
echo decbin($a)."<br>"; //11111110111111111011111101101111
$a = $a + pow(2,24); // 设置第24项
echo decbin($a)."<br>"; //11111111111111111011111001101111
//判定是否有第30项权限
if($a & pow(2,30))
echo "yes<br>";
else
echo "no<br>";
//判定是否有第8项权限
if($a & pow(2,8))
echo "yes<br>";
else
echo "no<br>";?>
//简化一下。使用数字变量,每个可容纳32个独立设置
//下面是测试例,应该很容易看懂
$b = "11111111111111111111111111111111"; // 32项权限,全1为所有权限
$a = bindec($b);
$a = $a & ~pow(2,8); // 取消第8项,以0开始:0-31
echo decbin($a)."<br>"; //11111111111111111111111011111111
$a = $a & ~(pow(2,7)|pow(2,4)|pow(2,14)|pow(2,24)); // 再取消第7、4、14、24项
echo decbin($a)."<br>"; //11111110111111111011111101101111
$a = $a + pow(2,24); // 设置第24项
echo decbin($a)."<br>"; //11111111111111111011111001101111
//判定是否有第30项权限
if($a & pow(2,30))
echo "yes<br>";
else
echo "no<br>";
//判定是否有第8项权限
if($a & pow(2,8))
echo "yes<br>";
else
echo "no<br>";?>
而如果用户多,还最好先用户属于什么组,什么组能用什么模块这样的逻辑结构~~~
用逻辑运算是能体现检验时候的算法优势,但是就是添加减少系统模块的时候比较麻烦
bindec最多好像只能转换31位1,那么第32位无效。
位运算的确比较快to flydreams()
不错的想法。先对模块进行控制,再对模块之内的小权限用唠叨的办法进行控制,可以控制上百项权限,很不错。to freeantfly(自由蚂蚁)
实际上就是这样做的。