惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
J
Java Code Geeks
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
M
MIT News - Artificial intelligence
U
Unit 42
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
I
InfoQ
WordPress大学
WordPress大学
H
Help Net Security
D
Docker
B
Blog
腾讯CDC
A
About on SuperTechFans
Recent Announcements
Recent Announcements
雷峰网
雷峰网
有赞技术团队
有赞技术团队
C
Check Point Blog
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - 一望无际的南

wps转PDF-解决IPAD中PDF乱码问题 thinkserver TS250 虚拟化主机部署 小微企业的数据备份方案 mac idea 修改git账号 mac 同一应用多实例的切换 沙雕的git Plugin 一行命令完成linux对文件的授权 jira 8.x 性能调优 NODEJS npm build 中哪些乱码是什么? DT 还是IT 混乱的docker swarm 版本在运维的重要性 nginx 在linux下端口被禁用问题 bitbucket灾难恢复或者服务迁移指南 2020年服务器迁移 当,规范什么都不是 记阿里云SLB后配置Nginx反向代理百度地图API的坑 gradle介绍 Centos7 改名问题
coder,不要做计算机,好吗?
一望无际的南 · 2020-05-02 · via 博客园 - 一望无际的南

客户一个文件权限系统,对权限做了7种分类,读写等

不带名字coder,分别定义了7条记录,所以,如果这个客户对某个目录或文件有权限最多的情况就会有7条记录。

嗯嗯,coder用AOP做了权限校验,

终于,这个系统上线了。

嗯嗯,一个sql查询花了10s。

嗯,客户说我们是吃屎的。。。我tmd太荣幸了。

好吧,重新设计吧,

image

控制到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))