这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用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;

}

当然,多权限的验证只要扩展一下就可以了。

几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!

java 位运算 权限控制_java 位运算权限管控(转载)相关推荐

  1. 松耦合式的权限控制设计,自定义权限表达式

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  2. RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣

    RBAC.控制权限设计.权限表设计 基于角色权限控制和基于资源权限控制的区别优劣 一.介绍 二.基于角色的权限设计 三.基于资源的权限设计 四.主体.资源.权限关系图 主体.资源.权限相关的数据模型 ...

  3. java开发企业级权限管理系统_Java开发企业级权限管理系统 视频教程

    第1章 课程整体概述与权限管理系统介绍 1-1 为什么企业级项目需要权限管理 1-2 权限管理的核心是什么? 1-3 理想中的权限管理应该是什么样的? 1-4 主流开源权限管理框架有哪些? 1-5 1 ...

  4. SAP用户权限控制大解析及权限进阶分析

    通常basis会使用PFCG做权限管理,你保存时会产生一个系统外的profile name,而且,SU01时用户有profile 和role两栏位. 这些个profile name ,profile, ...

  5. SpringSecurity 权限控制之开启动态权限注解支持

    开启授权的注解支持 这里给大家演示三类注解,但实际开发中,用一类即可! <!-- 开启权限控制注解支持 jsr250-annotations="enabled" 表示支持js ...

  6. java加减两个运算的代码_java加减乘除运算代码

    package demo; import java.util.Stack; /** * 利用栈,进行四则运算的类 * 用两个栈来实现算符优先,一个栈用来保存需要计算的数据 numStack,一个用来保 ...

  7. JAVA中FC什么意思_java – 位掩码的规则是什么?像0xFF vs. 0xFC

    我正在制作一个创建程序生成的地牢的游戏,我找到了一个使用位掩码来检索房间号和门类型等内容的例子. 在该示例中,他使用位掩码从每个图块的整数中提取细节.并且整数被这样分解 0xLLSDRRET L - ...

  8. java 判断对象为控制_Java流程控制

    Java流程控制 1.Scanner对象 ①java.util.Scanner是Java5的新特性,可以通过Scanner类来获取用户的输入. ②基本语法: 1 Scanner s=new Scann ...

  9. JAVA线程并发数量控制_Java并发工具类(三):控制并发线程数的Semaphore

    作用 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 简介 Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数 ...

最新文章

  1. 设计模式六大原则:依赖倒置原则、为什么、多例子、分析例子、总结
  2. 上的介质簇的结构不正确_百面机器学习笔记 | 第八章:采样 | 07 不均衡样本集的重采样...
  3. 从搜索引擎到社交网络的艰难转变
  4. influxdb 最近小时统计_用pandas快速统计学生年龄班级等分组信息
  5. php网站需要装zend吗,php-zend网站也需要别名
  6. _thread_in_vm_Java Thread类的静态void sleep(long time_in_ms,int time_in_ns)方法,带示例
  7. (2021) 24 [持久化] 文件系统API
  8. 有道云笔记快捷键使用
  9. 动态绑定dropdownlist --开始拣.NET
  10. Excel表中的数据导入到数据库中
  11. 期待已久的大学生活之大一上
  12. Java中基于Rxtx的串口操作
  13. 解析MATLAB短时傅里叶变换函数spectrogram()
  14. Cisco Packet Tracer 实验教程
  15. Android——实时显示系统时间
  16. REST ful风格
  17. MySQL必知必会二:MySQL简介
  18. I.MX6 AW-NB177NF wifi HAL
  19. html win10虚拟键盘,Win10系统中内置虚拟键盘过大应该如何解决?
  20. Spring Boot 实现接口幂等性的 4 种方案

热门文章

  1. windows找不到文件gpedit.msc_此电脑右键管理提示windows找不到文件的解决方法
  2. mysql+使用swap_MySQL避免使用SWAP
  3. 威纶通触摸屏与mysql_威纶触摸屏应用实例 以及威纶通触摸屏配方组合
  4. [转载] 你真的会用 Java 中的三目运算符吗
  5. java map key 大写转小写_Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?(转)...
  6. html页面foot,HTML tfoot用法及代码示例
  7. 计算机考研985院校不歧视,考研最不歧视的985大学有哪些
  8. java math 类_Java Math类静态双层(double d)示例
  9. 三位bcd加法计数器_两个8位BCD编号的加法| 8085微处理器
  10. Spring Cloud Alibaba Nacos 的 2 种健康检查机制!