使用二进制进行权限控制
【摘要】 使用二进制进行权限控制,可减少程序的逻辑判断以及提升效率,linux系统的777权限原理也是通过2进制进行判断的例如,当需要判断某个账号是否有,增加,修改,删除,查询,常规判断需要4个权限字段,进行4种判断使用二进制判断,只需要位运算判断权限码就行了以下是原理以及教程位运算说明:http://www.php20.cn/article/116配置增删查改权限值$creat=1;//增0001$...
使用二进制进行权限控制,可减少程序的逻辑判断以及提升效率,linux系统的777权限原理也是通过2进制进行判断的
例如,当需要判断某个账号是否有,增加,修改,删除,查询,常规判断需要4个权限字段,进行4种判断
使用二进制判断,只需要位运算判断权限码就行了
以下是原理以及教程
位运算说明:http://www.php20.cn/article/116
配置增删查改权限值
$creat=1;//增0001
$update=2;//改0010
$read=4;//查0100
$delete=8;//删1000
复制
术语定义:
授权码:权限值的集合表示,例如linux的777权限,其实是
0001|0010|0100 = 0111(十进制7)
授权值:单个权限的权限值,例如linux的执行(1)写入2读取4,注意:权限值必须是2的幂级数,否则会出错!
授权:权限码=授权码的'或'操作0001|0010|0100 = 0111(十进制7)
回收权限:待回收的权限取反之后,和授权码进行'与'操作,例如,1111权限,去除增加权限,0001取反为1110,1110&1111 = 1110
验证权限:1:"授权值" = "授权码"&'授权值' 2:"授权码" = "授权码"|"授权值"
具体解释:
权限值:
php的int类型32位支持21亿左右的数值,转为二进制最大支持31位,可代表31种权限状态,理论上是足够用的啦
例如
$creat=1;//增0001
$update=2;//改0010
$read=4;//查0100
$delete=8;//删1000
$othe_1=16;//其他10000
$othe_2=32;//其他100000
$othe_3=64;
$othe_4=128;
复制
授权:
例如用户a有查,改,删除权限
则
$a = $read|$update|$delete;
echo $a;//a= 14;二进制为1110
复制
验证权限
判断用户$a是否有增加权限,
var_dump($creat==($creat&$a));//输出false,代表没有增加权限
var_dump($a==($a|$creat));//输出false,代表没有增加权限
复制
判断用户$a是否有修改权限
var_dump($update==($update&$a));//输出true,代表有修改权限
var_dump($a==($a|$update));//输出true,代表有修改权限
复制
以上就是二进制权限控制的内容啦,这样进行验证权限,可以少去多重判断,少几个表字段,还能提高代码运行效率哦!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)