小技巧:通过位移运算、或运算、与运算实现统一权限判断

做项目的时候,可能会需要设置多种权限,并分配给各个用户。传统做法是给用户权限对象或用户权限表,每个权限设置一个字段或将所有权限存储在xml中,用户使用权限时需要取出该权限的值进行验证(其中比较麻烦的就是验证每一种权限,就要取用户对应权限验证)
有没有一种统一权限,它里面的就包含了所有的用户权限信息,只要取一次就可以判断所有的权限呢?
在看Zookeeper源码时,发现可以通过位移、或运算、与运算实现这样的功能,分享一下:
例如
1、我们有READ、WRITE、CREATE、DELETE、ADMIN 5种权限
分别设置值
int READ = 1 << 0;
int WRITE = 1 << 1;
int CREATE = 1 << 2;
int DELETE = 1 << 3;
int ADMIN = 1 << 4;
2、用户有READ、WRITE、CREATE 3 种权限,那用户的统一权限可以如下方法获得
int auth = READ | WRITE |CREATE;
3、判断用户是否有CREATE、DELETE权限,可以将auth和CREATE、DELETE分别进行与运算
System.out.println(CREATE & auth); //结果为4
System.out.println(DELETE & auth); //结果为0
4、与运算后大于0的说明有权限,小于0的则是没有权限的
至于为什么,大家可以重新看看大学的《数据结构》就明白了。