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

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - 一望无际的南

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))