用位操作来表示操作权限

常见的位运算

运算符号
意义运算对象类型运算结果类型实例
~非运算整型、字符串整型~a
&与运算整型、字符串整型a&b
|或运算整型、字符串整型a|b
^异或运算整型、字符串整型a^b
<<位左移运算整型、字符串整型a<<2
>>位右移运算整型、字符串整型b>>2

权限管理办法是一个普遍采用的方法,主要是使用到"位运行符"操作,& 位与运算符、| 位或运行符。参与运算的如果是10进制数,则会被转换至2进制数参与运算,然后计算结果会再转换为10进制数输出。

添加权限使用或
判断权限使用与
去掉权限用异或

举例:

<?php

//赋予权限值-->删除:8、上传:4、写入:2、只读:1
define("mDELETE",8);
define("mUPLOAD",4);
define("mWRITE",2);
define("mREAD",1);

//部门经理,拥有所有权限
echo mDELETE | mUPLOAD | mWRITE | mREAD   //相当于 8 + 4 + 2 + 1 = 15

//判断权限
if($key & mDELETE){
	echo '有删除权限<br>';
}
else{
	echo '无删除权限<br>';
}
if($key & mUPLOAD){
	echo '有上传权限<br>';
}
else{
	echo '无上传权限<br>';
}
if($key & mWRITE){
	echo '有写权限<br>';
}
else{
	echo '无写权限<br>';
}
if($key & mREAD){
	echo '有读权限<br>';
}
else{
	echo '无读权限<br>';
}

//删除权限
$nkey = $key ^ mUPLOAD;

echo '删除上传权限后<br>';
echo "key=$nkey<br>";

if($nkey & mUPLOAD){
	echo '有上传权限<br>';
}
else{
	echo '无上传权限<br>';
}

1. 为什么常量都是2的幂次,而不是随便的整数:保证一位一权限.方便与或等操作.这是使用位表示权限的前提。

2. 与运算之后移位的原因 :因为与操作后, 右边还出现有其他0,通过移位,结果就是0或1,能简化判断。注意移位与初始值时的移位一样。

3.有几位就可以表示几种权限,32位可以表示32种权限。

做好权限值的分布,即那个1、2、4、8、16....(这里还有个顺序问题,越高级的权限就要越高的权限值,比如上面的例子所演示的删除权限)。有了权限分布表就可以确定给某个人什么权限了,你简单的理解成要哪个权限就加上相应的权限值吧。

这个方法很好用的,缺点就是如果权限分布得细的话,那么权限值会越来越大,你自己想想,2的几次方、如果所有的权限都要则是全部相加。不过对于一般的权限来说这个已经足够了。

转载于:https://my.oschina.net/shyl/blog/658651

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值