java 位运算 权限控制_java 位运算权限管控(转载)
这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用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 位运算权限管控(转载)相关推荐
- 松耦合式的权限控制设计,自定义权限表达式
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...
- RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣
RBAC.控制权限设计.权限表设计 基于角色权限控制和基于资源权限控制的区别优劣 一.介绍 二.基于角色的权限设计 三.基于资源的权限设计 四.主体.资源.权限关系图 主体.资源.权限相关的数据模型 ...
- java开发企业级权限管理系统_Java开发企业级权限管理系统 视频教程
第1章 课程整体概述与权限管理系统介绍 1-1 为什么企业级项目需要权限管理 1-2 权限管理的核心是什么? 1-3 理想中的权限管理应该是什么样的? 1-4 主流开源权限管理框架有哪些? 1-5 1 ...
- SAP用户权限控制大解析及权限进阶分析
通常basis会使用PFCG做权限管理,你保存时会产生一个系统外的profile name,而且,SU01时用户有profile 和role两栏位. 这些个profile name ,profile, ...
- SpringSecurity 权限控制之开启动态权限注解支持
开启授权的注解支持 这里给大家演示三类注解,但实际开发中,用一类即可! <!-- 开启权限控制注解支持 jsr250-annotations="enabled" 表示支持js ...
- java加减两个运算的代码_java加减乘除运算代码
package demo; import java.util.Stack; /** * 利用栈,进行四则运算的类 * 用两个栈来实现算符优先,一个栈用来保存需要计算的数据 numStack,一个用来保 ...
- JAVA中FC什么意思_java – 位掩码的规则是什么?像0xFF vs. 0xFC
我正在制作一个创建程序生成的地牢的游戏,我找到了一个使用位掩码来检索房间号和门类型等内容的例子. 在该示例中,他使用位掩码从每个图块的整数中提取细节.并且整数被这样分解 0xLLSDRRET L - ...
- java 判断对象为控制_Java流程控制
Java流程控制 1.Scanner对象 ①java.util.Scanner是Java5的新特性,可以通过Scanner类来获取用户的输入. ②基本语法: 1 Scanner s=new Scann ...
- JAVA线程并发数量控制_Java并发工具类(三):控制并发线程数的Semaphore
作用 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 简介 Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数 ...
最新文章
- 设计模式六大原则:依赖倒置原则、为什么、多例子、分析例子、总结
- 上的介质簇的结构不正确_百面机器学习笔记 | 第八章:采样 | 07 不均衡样本集的重采样...
- 从搜索引擎到社交网络的艰难转变
- influxdb 最近小时统计_用pandas快速统计学生年龄班级等分组信息
- php网站需要装zend吗,php-zend网站也需要别名
- _thread_in_vm_Java Thread类的静态void sleep(long time_in_ms,int time_in_ns)方法,带示例
- (2021) 24 [持久化] 文件系统API
- 有道云笔记快捷键使用
- 动态绑定dropdownlist --开始拣.NET
- Excel表中的数据导入到数据库中
- 期待已久的大学生活之大一上
- Java中基于Rxtx的串口操作
- 解析MATLAB短时傅里叶变换函数spectrogram()
- Cisco Packet Tracer 实验教程
- Android——实时显示系统时间
- REST ful风格
- MySQL必知必会二:MySQL简介
- I.MX6 AW-NB177NF wifi HAL
- html win10虚拟键盘,Win10系统中内置虚拟键盘过大应该如何解决?
- Spring Boot 实现接口幂等性的 4 种方案
热门文章
- windows找不到文件gpedit.msc_此电脑右键管理提示windows找不到文件的解决方法
- mysql+使用swap_MySQL避免使用SWAP
- 威纶通触摸屏与mysql_威纶触摸屏应用实例 以及威纶通触摸屏配方组合
- [转载] 你真的会用 Java 中的三目运算符吗
- java map key 大写转小写_Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?(转)...
- html页面foot,HTML tfoot用法及代码示例
- 计算机考研985院校不歧视,考研最不歧视的985大学有哪些
- java math 类_Java Math类静态双层(double d)示例
- 三位bcd加法计数器_两个8位BCD编号的加法| 8085微处理器
- Spring Cloud Alibaba Nacos 的 2 种健康检查机制!