BigInteger.setBit与BigInteger.testBit 权限控制

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

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

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

                   1           菜单1                                                      A           6                                                                     1 1 0

                   2           菜单2                                                      B           12                                                                1 1 0 0

                   3           菜单3                                                      C           26                                                             1 1 0 1 0

                   4           菜单4                                                      D           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数组,0 代表 false  1 代表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必须为正整数了。。)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值