php使用位与运算符【&】或【|】实现权限管理
权限值是这样的
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的几次方、如果所有的权限都要则是全部相加。不过对于一般的权限来说这个已经足够了
php使用位与运算符【&】或【|】实现权限管理的更多相关文章
- 【&】位与运算符【|】位或运算符之权限控制算法
[&]位与运算符: 按位与运算符"&"是双目运算符. 其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数 ...
- 我的MYSQL学习心得(十三) 权限管理
我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...
- 《linux文件权限管理大总结》RHEL6
在linux系统下文件的权限通常会以下面的格式显示出来: Chmod文件权限: 权限的管理chmod -a 所有的权限 -u 文件所有者的权限 -g 组权限 -o 其他用户的权限 可以使用运算符来设 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这 ...
- setBit testBit权限管理(shiro项目中来的二)
一,setBit testBit权限管理的理解 1.1.jdk7文档解释 public boolean testBit(int n)Returns true if and only if the de ...
- mysql-数据(记录)相关操作(增删改查)及权限管理
一.介绍 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查 ...
- 第八章| 2. MySQL数据库|数据操作| 权限管理
1.数据操作 SQL(结构化查询语言),可以操作关系型数据库 通过sql可以创建.修改账号并控制账号权限: 通过sql可以创建.修改数据库.表: 通过sql可以增删改查数据: 可以通过SQL语句中 ...
- Linux 操作系统的权限为什么是1,2,4 而不是 1,2,3?如何用二进制来做权限管理
1.二进制做权限的优点 大家都知道,在Linux操作系统中,x - 可执行权限,w - 可写权限 , r - 可读权限.其权限值分别是1,2,4,但是有没有想过为什么是1,2,4 而不是 1,2,3 ...
- 【MySQL】多表查询&事务&权限管理
多表查询: 查询语法: select 列名列表 from 表名列表 where.... 例子: 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INC ...
- MySQL高级学习笔记(二):mysql配置文件、mysql的用户与权限管理、mysql的一些杂项配置
文章目录 mysql配置文件 二进制日志log-bin 错误日志log-error 数据文件 两系统 Myisam存放方式 innodb存放方式 如何配置 mysql的用户与权限管理 MySQL的用户 ...
随机推荐
- 让background-color 无效
{ background-color: transparent; // 让背景透明,相当于背景颜色无效 }
- 第三周psp
12号 类别c 内容c 开始时间s 结束e 中断I 净时间T 结对项目 查资料 8:40 11:22 25m 137m 结对项目 修改代码 12:10 12:40 0m 30m 结对项目 修改代码 1 ...
- 母版页的 page_load事件执行两次
定义了一个母版页 Admin.master 部分代码如下 <body onload="LoadHight()"> <div> <!--公共的头部开始 ...
- 31. Flatten Binary Tree to Linked List
Flatten Binary Tree to Linked List Given a binary tree, flatten it to a linked list in-place. For ex ...
- Statement及PreparedStatement执行多个sql
这两个对象的区别: 1.Statement它更适合执行不同sql的批处理,它没有提供预处理功能,性能比较低. 2.PreparedStatement它适合执行相同的批处理,它提供了预处理功能, ...
- js动画性能提升笔记
JavaScript动画的性能并不亚于CSS动画.因此,如果使用了现代的动画库,例如Velocity,那么动画引擎的性能将不再是app的瓶颈,构成瓶颈的只有代码. 网络性能相关 动画是浏览器运行中资源 ...
- Linux下的段错误(Segmentation fault)
Linux开发中常见段错误问题原因分析 1 使用非法的内存地址(指针),包括使用未经初始化及已经释放的指针.不存在的地址.受系统保护的地址,只读的地址等,这一类也是最常见和最好解决的段错误问题,使用G ...
- Java基础以及与C++的一些对比
这两天回忆一些Java基础,感觉自己很多地方都不是很牢固,也花费在不少时间和不少流量在手机上查资料. 还是写下来这些东西以免再忘记. 同时还是要记住多动手,编程最重要的就是动手敲啊,有想法有疑问就要自 ...
- redis info参数详解
redis 127.0.0.1:6381> info redis_version:2.4.16 # Redis 的版本redis ...
- 使用fastcgi_finish_request提高页面响应速度
当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法. 按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进 ...