用二进制控制权限码,int类型的32位,比如总的权限码来个1000,说明第四位有权限,其他没有权限,那么我该怎么判断各位的权限码,多个权限呢?

php中文网
发布: 2016-06-23 13:42:13
原创
1085人浏览过

二进制用int类型32位表示那个位有权限,下面的32位二进制表示权限码
全部有权限的话是: 11111111 11111111 11111111 11111111       //(下面的最前面的00000都是可以省略的)
只有最低位有权限:00000000  00000000 00000000 00000001
第一位有权限:        00000000 00000000 00000000 00000010
第二位有权限:       00000000 00000000 00000000 00000100
多个权限的:           00000000 00000000 00000000 00000101          //(这个是最后一位和第二位有权限)
我想问的是,假如我第零位是增加权限,第一位是查找权限,第二位是更新权限,第三位是删除权限,
但是单个权限时候我怎么判断这位有权限,或者给出的权限码是多个权限的时候我怎么能判断到底它有啥权限呢?
看看谁能写个方法,把得到的权限码放到方法里就能判断?
我这个其实要判断完是要放到前端展现到前端界面的 四个复选框    
增加  删除  修改 删除   //如果后端判断的是有两个权限则用户进入界面是看到 两个复选框是直接选中的????做php做权限的卡到这里了 求大牛们指导???、??/、????

通义灵码
通义灵码

阿里云出品的一款基于通义大模型的智能编码辅助工具,提供代码智能生成、研发智能问答能力

通义灵码 31
查看详情 通义灵码

回复讨论(解决方案)

?考一下 Linux ?限的做法 777 755 .... 前端?示 根? 所具?的?限 展示就可以了.

分割,判断,应该是这两个步骤了。。

我看过的大部分权限都是 1,1,1,1,1,1,1,1这样子有分割符号好区分的。

不知道你那是咋分割的,不过要是有具体能跑起来的小实例最好,我可以比葫芦画瓢再扩展。。。。。。。。。。。

很简单,位与

$权限 = array(  '增加' => 0b1,  '查找' => 0b10,  '更新' => 0b100,  '删除' => 0b1000,);$权限字 = 0b101;foreach($权限 as $k=>$v) {  printf("<input type=checkbox name=permit[] value=%s %s>%s<br>\n", $k, $权限字 & $v ? 'checked' : '', $k);}
登录后复制
<input type=checkbox name=permit[] value=增加 checked>增加<br><input type=checkbox name=permit[] value=查找 >查找<br><input type=checkbox name=permit[] value=更新 checked>更新<br><input type=checkbox name=permit[] value=删除 >删除<br>
登录后复制

$权限 = array(  '增加' => 0b1,  '查找' => 0b10,  '更新' => 0b100,  '删除' => 0b1000,);$权限字 = 0b101;foreach($权限 as $k=>$v) {  printf("<input type=checkbox name=permit[] value=%s %s>%s<br>\n", $v, $权限字 & $v ? 'checked' : '', $k);}
登录后复制
<input type=checkbox name=permit[] value=1 checked>增加<br><input type=checkbox name=permit[] value=2 >查找<br><input type=checkbox name=permit[] value=4 checked>更新<br><input type=checkbox name=permit[] value=8 >删除<br>
登录后复制

考虑到多个权限的问题,pow的第二个参数可以一直向上增。不知道你看明白没有

$add=pow(2,1);//2$del=pow(2,2);//4$update=pow(2,3);//8$query=pow(2,4);//16//增加&删除$p=$add+$del;if(getstatus($p,1)){//1是查询	echo '有增加的权限<br>';}//增加&删除&修改$p=$add+$del+$update;if(getstatus($p,3)){//3是修改	echo '有修改的权限<br>';}if(!getstatus($p,4)){//4是查询	echo '没有查询的权限<br>';}function getstatus($status,$p){	$t = $status & pow(2, $p) ? 1 : 0;	return $t;}
登录后复制

五楼的方法我试过了,我的前端代码有个引入的格式,他输出放到前端时候总是不放到格式里,不知道是怎么回事,是不是要在printf(),之前要加点代码什么的,前台我的html代码如下:

 
 
 
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
查看网页源码时候 他们这些
查看网页源码时候,增加

查找

更新

删除

不在这个块中??求解

你现在应该是可以设置32种权限,判断单个标志位是否有这个权限

getAuth($postStatus, $targetStatus){    return $status & $targetStatus;}getAuth(0x21f, 0x78);    //判断是否有 00000000 00000000 00000000 011111000权限
登录后复制

php里这种做法弊大于利吧,从程序角度来看,貌似没有起到什么优化作用;从数据结构来看,也不方便管理和查找
个人想法

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号