PHP利用二进制实现权限控制,遇到一个瓶颈,求解决方案。
时间:2011-12-18
来源:互联网
原理:
1、对N(权限的ID)进行2的N次方,然后相加,即为所有权限。
2、对N(当前权限的ID)进行2的N次方,然后和所有权限进行与运算。如果结果和当前权限的值相等那么就代表有权限,否则代表没权限。
Rank表结构和数据
ID Url
1 1.php
2 2.php
3 3.php
4 4.php
5 5.php
假如对2, 3, 4有权限,那么4 + 8 + 16 = 28(2的2次方+2的3次方+2的4次方)
对2有权限,与结果等于2^2
11100 28 = 2^2 + 2^3 + 2^4
00100 4 = 2^2
00100
对3有权限,与结果等于2^3
11100 28 = 2^2 + 2^3 + 2^4
01000 8 = 2^3
01000
对4有权限,与结果等于2^4
11100 28 = 2^2 + 2^3 + 2^4
10000 16 = 2^4
10000
对1没有权限,与结果等于0
11100 28 = 2^2 + 2^3 + 2^4
00010 2 = 2^1
00000
对5没有权限,与结果等于0
011100 28 = 2^2 + 2^3 + 2^4
100000 32 = 2^5
000000
下面是我用PHP写的一个函数,用来判断当前用户是否拥有当前的权限PHP code
现在我遇到一个问题,就是我可能会有成千上万的权限,在这种情况下如果进行2的1000次方或2的10000次方。PHP就会计算不出来。请问怎么处理这种情况,或者是否还有其它的设计思路?谢谢。
1、对N(权限的ID)进行2的N次方,然后相加,即为所有权限。
2、对N(当前权限的ID)进行2的N次方,然后和所有权限进行与运算。如果结果和当前权限的值相等那么就代表有权限,否则代表没权限。
Rank表结构和数据
ID Url
1 1.php
2 2.php
3 3.php
4 4.php
5 5.php
假如对2, 3, 4有权限,那么4 + 8 + 16 = 28(2的2次方+2的3次方+2的4次方)
对2有权限,与结果等于2^2
11100 28 = 2^2 + 2^3 + 2^4
00100 4 = 2^2
00100
对3有权限,与结果等于2^3
11100 28 = 2^2 + 2^3 + 2^4
01000 8 = 2^3
01000
对4有权限,与结果等于2^4
11100 28 = 2^2 + 2^3 + 2^4
10000 16 = 2^4
10000
对1没有权限,与结果等于0
11100 28 = 2^2 + 2^3 + 2^4
00010 2 = 2^1
00000
对5没有权限,与结果等于0
011100 28 = 2^2 + 2^3 + 2^4
100000 32 = 2^5
000000
下面是我用PHP写的一个函数,用来判断当前用户是否拥有当前的权限PHP code
<?php //拥有的权限的ID分别是:2, 3, 4 //2^2 + 2^3 + 2^4 = 4 + 8 + 16 = 28 check_rank(28, 5); /** $num_all:进行2的N(权限ID)次方之后的所有权限的总和 $num_current:当前权限的ID */ function check_rank($num_all, $num_current) { $num_current = pow(2, $num_current); $num_result = $num_all & $num_current; $result = $num_result == $num_current ? "true" : "false"; echo $result; } ?>
现在我遇到一个问题,就是我可能会有成千上万的权限,在这种情况下如果进行2的1000次方或2的10000次方。PHP就会计算不出来。请问怎么处理这种情况,或者是否还有其它的设计思路?谢谢。
作者: subendong 发布时间: 2011-12-18
等待热心人回复。。。
作者: subendong 发布时间: 2011-12-19
求解决方案
作者: subendong 发布时间: 2011-12-19
参考linux下的文件(目录)权限设置
777 = 1+2+4 1+2+4 1+2+4
用位运算不是很快很好吗啊?
777 = 1+2+4 1+2+4 1+2+4
用位运算不是很快很好吗啊?
作者: sdsuper 发布时间: 2011-12-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28