数据库权限优化,权限设计BigInteger
时间:2021-07-01 10:21:17
帮助过:3人阅读
-
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做对比来判断是否具有该菜单权限
[java] view
plain
copy
-
public static boolean testRights(BigInteger sum,int targetRights){
-
return sum.testBit(targetRights);
-
}
sum为对应角色的菜单权限值,targetRights为具体菜单ID,通过biginteger的testBit方法来判断是否存在里面,如果存在就返回true,不存在就返回false.
biginteger通过set的值,其实是2的权的和。下面有一个列子:
[java] view
plain
copy
-
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的空间也非常的小,不为是一个好的权限设计思路。