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 相关文章推荐
phpfans留言版用到的install.php
Jan 04 PHP
PHP5+UTF8多文件上传类
Oct 17 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP pear安装配置教程
May 14 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 PHP
PHP asXML()函数讲解
Feb 03 PHP
PHP模型Model类封装数据库操作示例
Mar 14 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&&mysql)一
2006/10/09 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Python查看微信撤回消息代码
2018/06/07 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python中的类与类型示例详解
2019/07/10 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
体育专业自荐书
2014/05/29 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
入党申请书格式
2019/06/20 职场文书
redis限流的实际应用
2021/04/24 Redis
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python