使用二进制进行权限控制

简介: 使用二进制进行权限控制

使用二进制进行权限控制,可减少程序的逻辑判断以及提升效率,linux系统的777权限原理也是通过2进制进行判断的


例如,当需要判断某个账号是否有,增加,修改,删除,查询,常规判断需要4个权限字段,进行4种判断

使用二进制判断,只需要位运算判断权限码就行了


以下是原理以及教程

位运算说明:http://www.php20.cn/article/116


配置增删查改权限值

$creat=1;//增0001

$update=2;//改0010

$read=4;//查0100

$delete=8;//删1000

术语定义:

授权码:权限值的集合表示,例如linux的777权限,其实是

0001|0010|0100 = 0111(十进制7)

授权值:单个权限的权限值,例如linux的执行(1)写入2读取4,注意:权限值必须是2的幂级数,否则会出错!

授权:权限码=授权码的'或'操作0001|0010|0100 = 0111(十进制7)

回收权限:待回收的权限取反之后,和授权码进行'与'操作,例如,1111权限,去除增加权限,0001取反为1110,1110&1111 = 1110

验证权限:1:"授权值" = "授权码"&'授权值'  2:"授权码" = "授权码"|"授权值"


具体解释:

权限值:

php的int类型32位支持21亿左右的数值,转为二进制最大支持31位,可代表31种权限状态,理论上是足够用的啦

例如

$creat=1;//增0001

$update=2;//改0010

$read=4;//查0100

$delete=8;//删1000

$othe_1=16;//其他10000

$othe_2=32;//其他100000

$othe_3=64;

$othe_4=128;

授权:

例如用户a有查,改,删除权限

$a$read|$update|$delete;

echo$a;//a= 14;二进制为1110

验证权限

判断用户$a是否有增加权限,

var_dump($creat==($creat&$a));//输出false,代表没有增加权限

var_dump($a==($a|$creat));//输出false,代表没有增加权限

判断用户$a是否有修改权限

var_dump($update==($update&$a));//输出true,代表有修改权限

var_dump($a==($a|$update));//输出true,代表有修改权限



以上就是二进制权限控制的内容啦,这样进行验证权限,可以少去多重判断,少几个表字段,还能提高代码运行效率哦!


目录
相关文章
|
JavaScript Linux
(简单成功详细)CentOS 安装 node.js
(简单成功详细)CentOS 安装 node.js
1853 1
|
Web App开发 编解码 前端开发
面试题22:如何测试Web浏览器的兼容性?
面试题22:如何测试Web浏览器的兼容性?
401 3
|
存储 SQL Java
基于二进制控制系统权限
在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的数字0和1来表示。在计算机中,最常用的是二进制,因为组成计算机系统的逻辑电路通常只有开和关这两个状态,用0和1很好表示这两种状态。
2805 0
基于二进制控制系统权限
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【9月更文挑战第35天】本文将带你走进Node.js的世界,从基础概念到实战应用,一步步揭示Node.js在后端开发中的魅力。我们将通过实际代码示例,让你轻松掌握Node.js的开发技巧,开启你的后端开发之旅。
|
SQL 存储 数据库
实验4:SQL视图操作技巧与方法
在数据库管理系统中,视图(View)是一种虚拟表,它基于SQL查询的结果集创建,并不实际存储数据
|
12月前
申请阿里云的免费企业邮箱
要申请阿里云的免费企业邮箱,您可以按照以下步骤操作: 访问阿里云企业邮箱免费版申请页面。
901 5
|
SQL 数据可视化 安全
微软SQL Server可视化工具与技巧
微软SQL Server不仅提供了强大的数据库管理功能,还集成了多种可视化工具,帮助用户更直观地理解和管理数据
|
Java 数据库连接 mybatis
mybatis注解@Select中添加判断条件<script>
mybatis注解@Select中添加判断条件<script>
1059 0
Element UI 表格数据格式化
Element UI 表格数据格式化
255 0
|
JSON 安全 API
Flask-Login与Flask-RESTful:扩展你的应用功能
【4月更文挑战第16天】本文介绍了两个实用的Flask扩展——Flask-Login和Flask-RESTful。Flask-Login提供用户认证和会话管理,简化了登录、注销和保护路由的逻辑。而Flask-RESTful则助力构建RESTful API,支持多种HTTP方法和请求解析。通过这两个扩展,开发者能轻松增强Flask应用的功能性,实现安全的用户认证和高效的API交互。