权限值是这样的 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则是假的
例子: <?php // 定义权限 define("mHIGHT", 16);// 更高的权限,2的4次方 define("mDELETE", 8);// 删除的权限,2的3次方 define("mUPLOAD", 4);// 上传的权限,2的2次方 define("mWRITE", 2);// 写入的权限,2的1次方 define("mREAD", 1);// 只读,2的0次方
// 赋值给权限 echo mDELETE|mUPLOAD|mWRITE|mREAD;
if(19 & 16) echo '有更高的权限<br>';
// 判断权限用&【位与符】,假设权限值$key $key = 13;//13=8+4+1 if($key & mDELETE) echo '有删除权限<br>';
if($key & mUPLOAD) echo '有上传权限<br>';
if($key & mWRITE) echo '有写入权限<br>';
if($key & mREAD) echo '有只读权限<br>';
////////////////////////////////////////////////////////////// $key = 13;//13=8+4+1 if($key & 8) echo '有删除权限<br>';
if($key & 4) echo '有上传权限<br>';
if($key & 2) echo '有写入权限<br>';
if($key & 1) echo '有只读权限<br>';
?>
权限分值的这其中一个算法就是这样的,可以说是简单高效。也不知大家明白没有,不明白也没关系,记住例子就行了。前提就是做好权限值的分布,即那 个1、2、4、8、16….(这里还有个顺序问题,越高级的权限就要越高的权限值,比如上面的例子所演示的删除权限)。有了权限分布表就可以确定给某个人 什么权限了,你简单的理解成要哪个权限就加上相应的权限值吧。 这个方法很好用的,缺点就是如果权限分布得细的话,那么权限值会越来越大,你自己想想,2的几次方、如果所有的权限都要则是全部相加。不过对于一般的权限来说这个已经足够了
|
请发表评论