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 * @return */ public boolean checkPermission(Integer userId){ int set = userId / 8; int position = userId % 8; if((auths[set]&(1 << position))!=0){ return true; } return false; } public byte[] getAuths() { return auths; } public void setAuths(byte[] auths) { this.auths = auths; } }