ACL的全称是Access Control List,翻译成中文是访问控制列表,一般用来描述某一权限下的用户授权情况
将权限信息封装成字节数组,通过位运算来处理授权和权限校验的业务逻辑,代码示例如下:
public class PrivilegeService {
/**
* 权限字节数组
* 一个byte等于8bit,一个bit表示一个user的权限(0表示无权限,1表示有权限)
*/
private byte[] auths=new byte[120];//120个数组能表述960个用户
/**
* 初始化权限操作
*/
public void initPrivilege(){
for(int i=0;i<auths.length;i++){
auths[i]=0;//将所有用户设置成无权限
}
}
/**
* 执行授权操作
* @param userId 用户ID
* @param isAssign true表示授权,false表示移除权限
*/
public void authorizePrivilege(Integer userId,boolean isAssign){
int set = userId / 8;//一个字节为8位
byte b = auths[set];//获取userId所在的字节
int position = userId % 8;//获取userId所在的位置
if (isAssign){// 执行授权操作
auths[set] = (byte) (b | (1 << position));
}else{//执行权限移除操作
auths[set] = (byte) (b & (~(1 << position)));
}
}
/**
* 判断用户是否具有权限
* @param userId
* @