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的用户 ...
随机推荐
- 【转】C#环形队列
概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: 1 public class MyQueue< ...
- mac配置impala odbc
下载mac对应驱动并安装:http://www.cloudera.com/downloads.html.html *HOST 地址是impala Daemon所在的机器ip,端口可以在cm中设置 vi ...
- AX 2012 关于parts 添加
只有当引用parts的form中design属性style为 ListPage, DetailsFormMaster, or DetailsFormTransaction,才能创建FactBox pa ...
- php disk_free_space与disk_total_space实例介绍
php disk_free_space 函数与disk_total_space 函数教程,第一个函数是指函数返回的空间,以字节为单位,在指定的目录,而disk_total_space 函数返回的总空间 ...
- sql语句Group By用法-转载
sql语句Group By用法一则 2007-10-25 12:00 sql语句Group By用法一则 如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么 ...
- Android软件测试Monkey测试工具
前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.其 ...
- js实现缓冲运动,和匀速运动有点不相同
缓冲运动和匀速运动有点不同,看图可以知道缓冲运动速度是越来越慢的. <style> *{ padding:0; margin:10px 0; } #div1{ height:100px; ...
- js实现右侧的分享效果
就是当鼠标移到上面的时候,他会出现,鼠标移出就消失. nmouseover和nmouseout就能实现 <style> *{padding:0;margin:0;} #s1{width:2 ...
- ssh通道技术
所有机器均为Linux操作系统. 机器是A,中间服务器为B,目标服务器是C. 从A可以ssh到B,从B可以ssh到C,但是A不能直接ssh到C. 现在展示利用ssh通道技术从A直接传输文件到C. ...
- 修改win10打开文件资源管理器