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 二进制权限,基于二进制位的权限控制(数据库里的二进制)相关推荐

  1. linux操作系统权限详解,Linux权限详解

    权限 权限是操作系统用来限制对资源访问的机制.权限一般分为读.写.执行.每个用户都有特定的权限.所属用户.所属组,通过这样的机制来限制哪些用户.哪些组可以对待特定的文件进行怎么样的操作. 每个进程都是 ...

  2. Django 基于角色的权限控制

    有一种场景, 要求为用户赋予一个角色, 基于角色(比如后管理员,总编, 编辑), 用户拥有相应的权限(比如管理员拥有所有权限, 总编可以增删改查, 编辑只能增改, 有些页面的按钮也只有某些角色才能查看 ...

  3. AspNetForums中基于角色的权限控制

    AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...

  4. 基于角色的权限控制模型RBAC

    本文来说下基于角色的权限控制模型RBAC 文章目录 概述 RBAC权限模型简介 RBAC的演化进程 用户与权限直接关联 一个用户拥有一个角色 一个用户一个或多个角色 页面访问权限与操作权限 数据权限 ...

  5. 基于属性的权限控制模型ABAC

    本文来说下基于属性的权限控制模型ABAC 文章目录 RBAC 的缺憾 什么是ABAC访问控制模型 ABAC相关术语 ABAC的使用场景 为什么 ABAC 能解决复杂场景下的问题 Attribute 易 ...

  6. 图文详解基于角色的权限控制模型RBAC

    我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问.操作.数据权限.形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control).强制 ...

  7. RBAC新解 - 基于资源的权限管理

    1.什么是角色 当说到程序的权限管理时,人们往往想到角色这一概念.角色是代表一系列可执行的操作或责任的实体,用于限定你在软件系统中能做什么.不能做什么.用户帐号往往与角色相关联,因此,一个用户在软件系 ...

  8. 基于shiro的权限设计

    shiro介绍 Apache shiro是一个权限控制框架,它将安全认证抽取出来,实现用户身份认证,权限授权,加密,会话管理等功能,是一个通用的安全认证框架,而且还可以用于分布式集群.功能如下 1.验 ...

  9. C 实现基于角色的权限系统

    本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1068 实例使用C# 实现基于角色的权限 ...

最新文章

  1. Mocha BSM 6.8成功发布
  2. 开发日记 20210316
  3. Windows下sc create命令行添加/创建/修改服务
  4. A.M. Deviation 思维
  5. Elasticsearch实现原理分析
  6. Java TheadLocal
  7. SAP Spartacus home页面根据product code请求产品数据的几种边界情况
  8. iOS开发UI篇—字典转模型
  9. 什么是Ext(ExtJs)【转载】
  10. dockerfile安装oracle,docker通过Dockerfile安装oracle-12c数据库
  11. 抓包分析数据帧中IP数据包的一些关键字段【南邮网课例题】
  12. OpenResty无损升级内嵌nginx版本0DAY漏洞
  13. Ubuntu16.04 + 微软kinect 2 实现rgbdslam V2
  14. cocos creator 发布IOS版本(一)从零开始,Xcode:12.0
  15. javaWeb的线下服装店管理平台、基于ssm(springboot版本也有)+mysql线下服装销售系统
  16. 移动端、PC端 网页特效
  17. 自己定义jquery插件轮播图
  18. 勒索软件攻击:如何使用加密来保护您的数据
  19. 正点原子stm32f4 mpu6050外接方法
  20. 手机html在哪儿,怎么定位手机位置在哪?其实很简单就这样设置就可以了

热门文章

  1. oem718d 基准站设置_RTK电台、网络模式作业设置流程
  2. python中怎么复制代码_Python对象怎么引用_Python对象怎么复制代码_一聚教程网
  3. python暂停和恢复_python – 暂停和恢复QThread
  4. Python进阶-函数默认参数,特别是参数传递为空列表
  5. python数据抓取技术与实战训练_师傅带徒弟学Python:项目实战1:网络爬虫与抓取股票数据...
  6. 别再Prompt了!谷歌提出tuning新方法,强力释放GPT-3潜力!
  7. COS系统的前端演变和发展
  8. CVPR 2019轨迹预测竞赛冠军方法总结
  9. 论文浅尝 | KG Embedding with Iterative Guidance from Soft Rules
  10. 论文浅尝 | 基于多原型mention向量的文本-实体联合学习