coder,不要做计算机,好吗?
客户一个文件权限系统,对权限做了7种分类,读写等
不带名字coder,分别定义了7条记录,所以,如果这个客户对某个目录或文件有权限最多的情况就会有7条记录。
嗯嗯,coder用AOP做了权限校验,
终于,这个系统上线了。
嗯嗯,一个sql查询花了10s。
嗯,客户说我们是吃屎的。。。我tmd太荣幸了。
好吧,重新设计吧,
控制到500ms了。再加一个redis,嗯嗯,真香。
不知名的coder,希望你早日进化。。。
补充,有天路过
https://blog.csdn.net/xiao__gui/article/details/11701893
上面用四个boolean类型变量来保存每种权限状态。下面是另外一种方式,使用位掩码的话,用一个二进制数即可,每一位来表示一种权限,0表示无权限,1表示有权限。
1 public class NewPermission { 2 // 是否允许查询,二进制第1位,0表示否,1表示是 3 public static final int ALLOW_SELECT = 1 << 0; // 0001 4 5 // 是否允许新增,二进制第2位,0表示否,1表示是 6 public static final int ALLOW_INSERT = 1 << 1; // 0010 7 8 // 是否允许修改,二进制第3位,0表示否,1表示是 9 public static final int ALLOW_UPDATE = 1 << 2; // 0100 10 11 // 是否允许删除,二进制第4位,0表示否,1表示是 12 public static final int ALLOW_DELETE = 1 << 3; // 1000 13 14 // 存储目前的权限状态 15 private int flag; 16 17 /** 18 * 重新设置权限 19 */ 20 public void setPermission(int permission) { 21 flag = permission; 22 } 23 24 /** 25 * 添加一项或多项权限 26 */ 27 public void enable(int permission) { 28 flag |= permission; 29 } 30 31 /** 32 * 删除一项或多项权限 33 */ 34 public void disable(int permission) { 35 flag &= ~permission; 36 } 37 38 /** 39 * 是否拥某些权限 40 */ 41 public boolean isAllow(int permission) { 42 return (flag & permission) == permission; 43 } 44 45 /** 46 * 是否禁用了某些权限 47 */ 48 public boolean isNotAllow(int permission) { 49 return (flag & permission) == 0; 50 } 51 52 /** 53 * 是否仅仅拥有某些权限 54 */ 55 public boolean isOnlyAllow(int permission) { 56 return flag == permission; 57 } 58 }
比较一下:
传统的,判断是只否允许Select和Insert权限
if (permission.isAllowSelect() && permission.isAllowInsert() && !permission.isAllowUpdate() && !permission.isAllowDelete())
新的
if (permission. isOnlyAllow (NewPermission.ALLOW_SELECT | NewPermission.ALLOW_INSERT))