首先有个菜单表,和权限表,用户表,
用户表id 关联权限id 权限表中要有个 权限字段
下面开始说权限字段中的数据存什么:
这里我们运用BitInteger这个类
1.在创建角色权限时首先运用 BitInteger中setBit( int);方法将所有菜单id依次set进创建的BItInteger中
并保存到我们的权限表中,
2.在查询/判断权限时用菜单id依次和权限字段用BitInteger中的testBit(int)进行对比 返回true则有权访问,false则无权访问;
注:菜单id一定要是数字
以上时大概流程,和思路。
public static void main(String[] args) {
String [] strArray = {"20","2","300","4","5","6","12"};
BigInteger bit = new BigInteger("0");
for(int i = 0;i<strArray.length;i++){
System.out.println(bit);
bit = bit.setBit(Integer.parseInt(strArray[i]));
}
System.out.println(bit);
boolean ok = bit.testBit(5);
System.out.println(ok);
}
输出:
0
1048576
1048580
2037035976334486086268445688409378161051468393665936250636140449354381299763336706184445956
2037035976334486086268445688409378161051468393665936250636140449354381299763336706184445972
2037035976334486086268445688409378161051468393665936250636140449354381299763336706184446004
2037035976334486086268445688409378161051468393665936250636140449354381299763336706184446068
2037035976334486086268445688409378161051468393665936250636140449354381299763336706184450164
true
以上时测试类方法,下面说下菜单权限的详细思路,
登陆成功后,进入读取菜单,1
1.将表中所有菜单读出放到listAllMenu中,然后创建一个新List用于存放有权限的菜单
2查询出当前用户的权限中的权限字段 role,
3遍历listAllMenu 读取菜单id然后和权限role用BitInteger中testBit()方法进行对比将返回true的对象放入新建的list中
(注:由于菜单涉及到父级菜单/子菜单,所以最好将对比打包成一个递归方法)
最后将新创建的list返回前台;
各位编程之路重在理解和动手所以就不粘详细代码了
这只不过是本人最基本的理解肯定有漏洞和不足指出,
在此发表的是实际工作中所遇到的功能思路,和一些异常,有些可能不堪一提,但却是是绊住我的问题都会记录在这里,也就当个笔记吧.