“`
import java.math.BigInteger;
/**
* 权限辅助类
*
* 使用场景:bornRights(..)生成的权限码写给角色,通过hasRight(..)来判断是否有权限.
* 优点: 简化数据库权限设计
*/
public class RightsHelper {
//判断是否有此权限
public static boolean hasRight(BigInteger total, int right) {
return total.testBit(right);
}
//同上
public static boolean hasRight(String total, String right) {
if (isEmpty(total))
return false;
return hasRight(new BigInteger(total), Integer.parseInt(right));
}
//生成权限码
public static BigInteger bornRights(int[] arr_rights) {
BigInteger rights_code = new BigInteger("0");
for (int i : arr_rights) {
rights_code = rights_code.setBit(i);
}
return rights_code;
}
//生成权限码
public static BigInteger bornRights(String[] arr_rights) {
BigInteger rights_code = new BigInteger("0");
for (String str : arr_rights) {
rights_code = rights_code.setBit(Integer.parseInt(str));
}
return rights_code;
}
/**
* 判空(null,"","null")
*
* @param string
* @return 为空则返回true,不否则返回false
*/
public static boolean isEmpty(String string) {
return string == null || "".equals(string) || "null".equals(string);
}
//测试
public static void main(String[] args) {
int[] arr = {1, 3, 5, 6, 7, 9};
BigInteger total = bornRights(arr);
System.out.println(total);
System.out.println("是否含权限2?" + total.testBit(2));
System.out.println("是否含权限3?" + hasRight(total, 3));
}
}
数据库:
当权限改变时,只需调用bornRights(..),将生成的权限写入.
如果需要判断一个角色是否包含5,直接用hasRight(..)就可以了.