PHP巧妙利用位运算实现网站权限管理的方法


Posted in PHP onMarch 12, 2017

首先我们先定义4个常量来设定四种权限:

=====================================

define(ADD,1);//增加数据库记录的权限
define(UPD,2);//修改数据库记录的权限
define(SEL,4);//查找数据库记录的权限
define(DEL,8);//删除数据库记录的权限

=====================================

接下来假设有3个用户:

A用户拥有ADD-UPD-SEL-DEL四个权限,用位或运算计算A的权限总值
$a_all=ADD|UPD|SEL|DEL;//$all=15 可以注意到这个值和加法的结果是一样的
B用户拥有ADD-UPD-SEL三个权限,用位或运算计算B的权限总值
$b_all=ADD|UPD|SEL;//$all=7 这个值和加法的结果又是一样的
C用户拥有ADD-UPD两个权限,用位或运算计算C的权限总值
$c_all=ADD|UPD;//$all=3 这个值和加法的结果还是一样的

=====================================

接下来我们用位与做运算
$a_all&ADD 结果为真
$a_all&UPD 结果为真
$a_all&SEL 结果为真
$a_all&DEL 结果为真

=====================================

$b_all&ADD 结果为真
$b_all&UPD 结果为真
$b_all&SEL 结果为真
$b_all&DEL 结果为假

=====================================

$c_all&ADD 结果为真
$c_all&UPD 结果为真
$c_all&SEL 结果为假
$c_all&DEL 结果为假

=====================================

发现奥秘没有?

1、当权限总值和没有的那个权限做位与运算,结果为假

2、权限的值都是2的次方

知道了这两点权限的处理就变得简单了吧,只要在每次执行涉及权限操作的时候把用户当前的权限总值和当前操作需要的权限做位与运算。如果结果为真执行,为假做报错处理就行啦(当然也不一定时报错,你可以自己设计没有权限时的程序)。

以上这篇PHP巧妙利用位运算实现网站权限管理的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
java EJB 加密与解密原理的一个例子
Jan 11 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
PHP 工厂模式使用方法
May 18 PHP
php使用CURL伪造IP和来源实例详解
Jan 15 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
php实现三级级联下拉框
Apr 17 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 #PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 #PHP
php pdo操作数据库示例
Mar 10 #PHP
yii2简单使用less代替css示例
Mar 10 #PHP
在Mac OS下搭建LNMP开发环境的步骤详解
Mar 10 #PHP
Yii2.0中使用js异步删除示例
Mar 10 #PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 #PHP
You might like
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP生成HTML静态页面实例代码
2008/08/31 PHP
php调用shell的方法
2014/11/05 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
python爬取网页内容转换为PDF文件
2020/07/28 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
2019/08/13 Python
Python实现密码薄文件读写操作
2019/12/16 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
校园十佳歌手策划书
2014/01/22 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL