您的位置:首页 > 其它

使用BigInteger.setBit与BigInteger.testBit来实现权限控制

2017-07-27 11:15 176 查看
       公司项目运用的ACE开源框架,其中的菜单权限管理用到了BigInterger的setBit方法和TsetBit方法进行权限验证,感觉用这种方式来进行权限验证比较有趣,只需一个整型术便可以对多个菜单权限进行验证(权限ID必须要是正整数!!!!!),在这里用通俗易懂的方式分析一下,不设计位运算!哈哈。

         假设我的数据库总共有4个菜单                                      4个账户

                  id         菜单名称                                                                     id         菜单权限值                                             
转换为二进制

                   1           菜单1                                                                         1           6                                                                    
1 1 0

                   2           菜单2                                                                         2           12                                                                1 1 0 0

                   3           菜单3                                                                         3           26                                                             1 1 0 1 0

                   4           菜单4                                                                         4           30                                                            
1 1 1 1 0

          假如账户A    有菜单1  菜单2  的权限,       权限值=2^1+2^2=6

                  账户B    有菜单2  菜单3 的权限,       权限值=2^2+2^3=12

                  账户C    有菜单1  菜单3  菜单4 的权限,       权限值=2^1+2^3+2^4=26

                  账户D    有菜单1  菜单2  菜单3  菜单4   的权限,      权限值=2^1+2^2+2^3+2^4=30  

          大家可以观察一下这些权限值转换为二进制数后的规律(假如把这些二进制数从右往左转换成一个bolean数组,1 代表 false 2 代表true),看上图的转换后的二进制,我们来看这个数组

                                        0                 1                     2                    3                      4

                账户A              F                 T                     T                    
F                     F     

                账户B              F                 F                    
T                     T                     F

                账户C              F                 T                    
F                    
T                     T

                账户D              F                 T                     T                     T                     T

把上面的  1  2  3  4  看成是菜单ID,T 和 F看成表示是否有该菜单权限,你们应该能发现其中的奥妙!(现在应该也可以说明为什么菜单ID必须为正整数了。。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: