采用BigInteger进行的权限设计
来源:互联网 发布:淘宝号刷了单会跑吗 编辑:程序博客网 时间:2024/06/13 15:44
最近看到了一个项目的权限是根据bigineger来进行计算的菜单权限,觉得还是不错,存储上只需要存储在一个字段里就可以了,通过计算算出该角色的菜单权限即可,效率也非常的快,放在session中也非常的小,下面简单说一下思路。
首先,将界面中选好的菜单树,勾选完成后传到后台,后台通过转成字符串数组来进行设值
public static BigInteger sumRights(String[] rights){BigInteger num = new BigInteger("0");for(int i=0; i<rights.length; i++){num = num.setBit(Integer.parseInt(rights[i]));}return num;}通过上面方法,返回一个BigInteger,然后将这个数字存入所属角色的菜单权限字段中。注意的是:这里的菜单ID必须是数字,String[] rights为所选菜单的数组,通过setbit方法一一设置进num中。
其奖,再获取权限的时候,也一样,通过把之前存入的菜单权限的biginteger和菜单ID做对比来判断是否具有该菜单权限
public static boolean testRights(BigInteger sum,int targetRights){return sum.testBit(targetRights);}
sum为对应角色的菜单权限值,targetRights为具体菜单ID,通过biginteger的testBit方法来判断是否存在里面,如果存在就返回true,不存在就返回false.
biginteger通过set的值,其实是2的权的和。下面有一个列子:
package com.hundsun.network.post.settle.job;import java.math.BigInteger;public class TestBigInteger { public static void main(String[] args) { //初始 BigInteger num = new BigInteger("0"); num = num.setBit(2); num = num.setBit(1); System.out.println(num); System.out.println(num.testBit(2)); System.out.println(num.testBit(1)); System.out.println(num.testBit(3)); }}num的值为6,是这样计算的2^2+1^2=6。
通过这种方式,不管是解析和查询其实效率都是很高的,占用session的空间也非常的小,不为是一个好的权限设计思路。
0 0
- 采用BigInteger进行的权限设计
- 采用BigInteger进行的权限设计
- 【权限设计】采用BigInteger进行的权限设计
- 数据库权限优化,权限设计BigInteger
- 采用long型数据的每一个二进制位代表一种权限,进行票据权限保存、取消、认证
- shiro 进行权限管理 —— 使用BigInteger进行权限计算获取菜单
- BigInteger权限判断示例
- BigInteger权限判断示例
- BigInteger权限判断示例
- BigInteger权限判断示例
- BigInteger权限判断
- BigInteger权限判断示例
- 关于BigInteger控制权限
- 采用按位与(&)按位或(|)进行权限检查的简单例子
- BigInteger:可以让超过Integer范围内的数据进行运算
- php页面访问时,统一进行权限验证的设计
- php页面访问时,统一进行权限验证的设计
- AppBox升级进行时 - 扁平化的权限设计
- vs2008命令窗口使用
- String、StringBuilder和StringBuffer的区别
- 326.[LeetCode]Power Of Three
- J2SE(十三)Java之数组
- 用js写的学生成绩管理系统
- 采用BigInteger进行的权限设计
- 一个远程注入的例子(让本机的所有程序弹出一个sylar对话框)
- IIS Request.ApplicationPath的问题
- 网站板块布局黄金视线分布法
- 递归算法--汉诺塔问题
- 四、runtime之Method Swizzling(四)
- Git如何回滚版本
- 【慕课笔记】5-2 四种XML解析方式大PK—四种解析方式解析速度分析
- Spring 声明式事务使用