php 二进制权限,基于二进制位的权限控制(数据库里的二进制)
declare @a BINARY(2)
set @a = 32768
select @a
BINARY 字节 1B = 8位 bit
BINARY(2) = 16 位二进制数
换算16进制位4位
2进制数
最大值为524287 转换16进制OxFFFF (111111111111111)
最高位值32768,转换16进制Ox8000 即两个字节位(1000000000000000)
如需16位二进制数据,只需声明BINARY(2) 即可。
使用时在代码中转换。
****************
1.一种实用的权限控制算法
这里我介绍一种很常用,也比较Professor的权限控制思路。
这里我用java语言描述,其实都差不多的。自己转一下就可以了。
为了方便,我们这里定义a^b为:a的b次方
这里,我们为每一个操作设定一个唯一的整数值,比如:
删除A---0
修改A---1
添加A---2
删除B---3
修改B---4
添加B---5
。。。
理论上可以有N个操作
这取决于你用于储存用户权限值的数据类型了。
这样,如果用户有权限:添加A---2;删除B---3;修改B---4
那用户的权限值 purview =2^2+2^3+2^4=28,也就是2的权的和了(之前打错了)。
化成二进制可以表示为11100
这样,如果要验证用户是否有删除B的权限,就可以通过位与运算来实现。
在Java里,位与运算运算符号为&
即是:int value = purview &((int)Math.pow(2,3));
你会发现,当用户有操作权限时,运算出来的结果都会等于这个操作需要的权限值!
原理:
位与运算,顾名思义就是对位进行与运算:
以上面的式子为例:purview & 2^3 也就是 28&8
将它们化成二进制有
11100
& 01000
-------------------
01000 == 8(十进制) == 2^3
同理,如果要验证是否有删除A---0的权限
可以用:purview &((int)Math.pow(2,0));
即:
11100
& 00001
------------------------
00000 == 0(十进制) != 2^0
这种算法的一个优点是速度快。可以同时处理N个权限
如果想验证是否同时有删除A---0和删除B---3的权限
可以用purview&(2^0+2^3)==(2^0+2^3)?true:false;
设置多角色用户。根据权限值判断用户的角色。。。
下面提供一个java的单操作权限判断的代码:
//userPurview是用户具有的总权限
//optPurview是一个操作要求的权限为一个整数(没有经过权的!)
public static boolean checkPower(int userPurview, int optPurview)
{
int purviewValue = (int)Math.pow(2, optPurview);
return (userPurview & purviewValue) == purviewValue;
}
当然,多权限的验证只要扩展一下就可以了。
几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!
如有疑问,请提出!天寒地冻,本人最怕人泼冷水了,知道这里高手如云。不要取笑,谢谢!
之后,有空我会将我的一些开发经验在本帖中提出,和大家一起分享,研究一下。请大家支持
public class Test {
// 将字符串转换成二进制字符串,以空格相隔
public String toBinary(String str) {
char[] strChar = str.toCharArray();
String result = "";
for (int i = 0; i < strChar.length; i++) {
result += Integer.toBinaryString(strChar[i]) + " ";
}
return result;
}
// 将二进制字符串转换成Unicode字符串
public String toStr(String binStr) {
String[] tempStr = StrToStrArray(binStr);
char[] tempChar = new char[tempStr.length];
for (int i = 0; i < tempStr.length; i++) {
tempChar[i] = toChar(tempStr[i]);
}
return String.valueOf(tempChar);
}
// 将二进制字符串转换为char
private char toChar(String binStr) {
int[] temp = binStrToIntArray(binStr);
int sum = 0;
for (int i = 0; i < temp.length; i++) {
sum += temp[temp.length - 1 - i] << i;
}
return (char) sum;
}
// 将初始二进制字符串转换成字符串数组,以空格相隔
private String[] StrToStrArray(String str) {
return str.split(" ");
}
// 将二进制字符串转换成int数组
private int[] binStrToIntArray(String binStr) {
char[] temp = binStr.toCharArray();
int[] result = new int[temp.length];
for (int i = 0; i < temp.length; i++) {
result[i] = temp[i] - 48;
}
return result;
}
public static void main(String[] args) {
Test cTob = new Test();
System.out.println(cTob.toBinary("橘子,好吃!aaa"));
System.out.println();
System.out.println(cTob.toBinary("999111"));
System.out.println();
System.out.println(cTob.toBinary("What a nice day!"));
System.out.println();
System.out.println(cTob.toBinary("^@^ - -! ()★"));
System.out.println();
System.out.println();
System.out.println(cTob.toStr("110101001011000 101101101010000 "
+ "1111111100001100 101100101111101 "
+ "101010000000011 1111111100000001 "
+ "1100001 1100001 1100001 "));
System.out.println(cTob.toStr("111001 111001 111001 "
+ "110001 110001 110001"));
System.out.println(cTob.toStr("1010111 1101000 1100001 "
+ "1110100 100000 1100001 100000 1101110 "
+ "1101001 1100011 1100101 100000 1100100 "
+ "1100001 1111001 100001 "));
System.out.println(cTob.toStr("1011110 1000000 1011110 "
+ "100000 101101 100000 101101 100001 100000 "
+ "1111111100001000 1111111100001001 10011000000101 "));
}
}
php 二进制权限,基于二进制位的权限控制(数据库里的二进制)相关推荐
- linux操作系统权限详解,Linux权限详解
权限 权限是操作系统用来限制对资源访问的机制.权限一般分为读.写.执行.每个用户都有特定的权限.所属用户.所属组,通过这样的机制来限制哪些用户.哪些组可以对待特定的文件进行怎么样的操作. 每个进程都是 ...
- Django 基于角色的权限控制
有一种场景, 要求为用户赋予一个角色, 基于角色(比如后管理员,总编, 编辑), 用户拥有相应的权限(比如管理员拥有所有权限, 总编可以增删改查, 编辑只能增改, 有些页面的按钮也只有某些角色才能查看 ...
- AspNetForums中基于角色的权限控制
AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...
- 基于角色的权限控制模型RBAC
本文来说下基于角色的权限控制模型RBAC 文章目录 概述 RBAC权限模型简介 RBAC的演化进程 用户与权限直接关联 一个用户拥有一个角色 一个用户一个或多个角色 页面访问权限与操作权限 数据权限 ...
- 基于属性的权限控制模型ABAC
本文来说下基于属性的权限控制模型ABAC 文章目录 RBAC 的缺憾 什么是ABAC访问控制模型 ABAC相关术语 ABAC的使用场景 为什么 ABAC 能解决复杂场景下的问题 Attribute 易 ...
- 图文详解基于角色的权限控制模型RBAC
我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问.操作.数据权限.形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control).强制 ...
- RBAC新解 - 基于资源的权限管理
1.什么是角色 当说到程序的权限管理时,人们往往想到角色这一概念.角色是代表一系列可执行的操作或责任的实体,用于限定你在软件系统中能做什么.不能做什么.用户帐号往往与角色相关联,因此,一个用户在软件系 ...
- 基于shiro的权限设计
shiro介绍 Apache shiro是一个权限控制框架,它将安全认证抽取出来,实现用户身份认证,权限授权,加密,会话管理等功能,是一个通用的安全认证框架,而且还可以用于分布式集群.功能如下 1.验 ...
- C 实现基于角色的权限系统
本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1068 实例使用C# 实现基于角色的权限 ...
最新文章
- Mocha BSM 6.8成功发布
- 开发日记 20210316
- Windows下sc create命令行添加/创建/修改服务
- A.M. Deviation 思维
- Elasticsearch实现原理分析
- Java TheadLocal
- SAP Spartacus home页面根据product code请求产品数据的几种边界情况
- iOS开发UI篇—字典转模型
- 什么是Ext(ExtJs)【转载】
- dockerfile安装oracle,docker通过Dockerfile安装oracle-12c数据库
- 抓包分析数据帧中IP数据包的一些关键字段【南邮网课例题】
- OpenResty无损升级内嵌nginx版本0DAY漏洞
- Ubuntu16.04 + 微软kinect 2 实现rgbdslam V2
- cocos creator 发布IOS版本(一)从零开始,Xcode:12.0
- javaWeb的线下服装店管理平台、基于ssm(springboot版本也有)+mysql线下服装销售系统
- 移动端、PC端 网页特效
- 自己定义jquery插件轮播图
- 勒索软件攻击:如何使用加密来保护您的数据
- 正点原子stm32f4 mpu6050外接方法
- 手机html在哪儿,怎么定位手机位置在哪?其实很简单就这样设置就可以了
热门文章
- oem718d 基准站设置_RTK电台、网络模式作业设置流程
- python中怎么复制代码_Python对象怎么引用_Python对象怎么复制代码_一聚教程网
- python暂停和恢复_python – 暂停和恢复QThread
- Python进阶-函数默认参数,特别是参数传递为空列表
- python数据抓取技术与实战训练_师傅带徒弟学Python:项目实战1:网络爬虫与抓取股票数据...
- 别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!
- COS系统的前端演变和发展
- CVPR 2019轨迹预测竞赛冠军方法总结
- 论文浅尝 | KG Embedding with Iterative Guidance from Soft Rules
- 论文浅尝 | 基于多原型mention向量的文本-实体联合学习