前言
平时我们系统的用户权限一般会存在数据库的一张权限表或者用户表的某个字段中来标识出用户是否具有某个条件。
这种情况对于一般系统平台是没有什么问题的,大多数都是这样实现的,我自己也是这样的实现方案。
最近看了一篇博客,讲的是电商互联网系统的商品或者用户等实体对象,对于权限的分配解决方案。
蛮有意思的,这里贴上部分demo:JAVA简单实现用户的权限分配
/**
* 用位运算实现用户权限分配
* 利用位运算最多可以实现32种权限,对于目前市面上的系统足够了
* 位运算的执行效率是非常快的
* @author James Lee
*
*/
public class Permisson {
private static final int ALLOW_SELECT = 1 << 0;// 查询1
private static final int ALLOW_INSERT = 1 << 1;// 新增2
private static final int ALLOW_UPDATE = 1 << 2;// 修改4
private static final int ALLOW_DELETE = 1 << 3;// 删除8
private static final int ALLOW_PAGE = 1 << 4;// 分页16
private static final int ALLOW_LOGIN = 1 << 5;// 登录32
// 存储目前 权限的状态比如 拥有查询和修改 flag = 1+4
private int flag;
public Permisson(int flag) {
super();
this.flag = flag;
}
// 增加用户权限 批量or单个
public void add(int per) {
flag = flag | per;
}
// 删除用户权限 批量or单个
public void del(int per) {
flag = flag &~ per;
}
// 查询用户是否具有某个权限
public boolean isAllow(int per) {
return ((flag & per) == per);
}
// 查询用户是否不具有某个权限
public boolean isNotAllow(int per) {
return ((flag & per) == 0);
}
public static void main(String[] args) {
int flag = ALLOW_DELETE + ALLOW_INSERT + ALLOW_LOGIN /* + ALLOW_PAGE + ALLOW_SELECT + ALLOW_UPDATE */;
System.out.println("当前权限状态:" + flag);
Permisson permisson = new Permisson(flag);
System.out.println("当前用户具有查询权限吗?" + permisson.isAllow(ALLOW_SELECT));
System.out.println("当前用户具有新增权限吗?" + permisson.isAllow(ALLOW_INSERT));
System.out.println("当前用户具有修改权限吗?" + permisson.isAllow(ALLOW_UPDATE));
System.out.println("当前用户具有删除权限吗?" + permisson.isAllow(ALLOW_DELETE));
System.out.println("当前用户具有分页权限吗?" + permisson.isAllow(ALLOW_PAGE));
System.out.println("当前用户具有登录权限吗?" + permisson.isAllow(ALLOW_LOGIN));
System.out.println("*******************************************************************************");
System.out.println("当前用户具有查询权限吗?" + permisson.isAllow(ALLOW_SELECT));
System.out.println("取消用户的删除权限!");permisson.del(ALLOW_DELETE);
System.out.println("当前用户具有删除权限吗?" + permisson.isAllow(ALLOW_DELETE));
System.out.println("给用户的新增查询、修改的权限!");permisson.add(ALLOW_SELECT+ALLOW_UPDATE);
System.out.println("当前用户是否不具备分页查询权限?" + permisson.isNotAllow(ALLOW_PAGE));
System.out.println("*******************************************************************************");
System.out.println("当前用户具有查询权限吗?" + permisson.isAllow(ALLOW_SELECT));
System.out.println("当前用户具有新增权限吗?" + permisson.isAllow(ALLOW_INSERT));
System.out.println("当前用户具有修改权限吗?" + permisson.isAllow(ALLOW_UPDATE));
System.out.println("当前用户具有删除权限吗?" + permisson.isAllow(ALLOW_DELETE));
System.out.println("当前用户具有分页权限吗?" + permisson.isAllow(ALLOW_PAGE));
System.out.println("当前用户具有登录权限吗?" + permisson.isAllow(ALLOW_LOGIN));
}
}
运行结果:
当前权限状态:42
当前用户具有查询权限吗?false
当前用户具有新增权限吗?true
当前用户具有修改权限吗?false
当前用户具有删除权限吗?true
当前用户具有分页权限吗?false
当前用户具有登录权限吗?true
*******************************************************************************
当前用户具有查询权限吗?false
取消用户的删除权限!
当前用户具有删除权限吗?false
给用户的新增查询、修改的权限!
当前用户是否不具备分页查询权限?true
*******************************************************************************
当前用户具有查询权限吗?true
当前用户具有新增权限吗?true
当前用户具有修改权限吗?true
当前用户具有删除权限吗?false
当前用户具有分页权限吗?false
当前用户具有登录权限吗?true