Linux文件权限用八进制数字表示,本质是将r=4、w=2、x=1按所有者、组、其他人三组二进制位映射相加,如644表示所有者读写、组和其他人只读。

按位与(&)和按位或(|)在权限控制中不是“辅助手段”,而是核心机制——它用一个整数就能紧凑表达多个布尔状态,查权限快、设权限简、存数据省。
权限怎么编码成数字
每个权限对应一个唯一的 2 的幂次值,确保二进制表示中只有**一位是 1**:
- 读(Read)→ 1 →
0001 - 写(Write)→ 2 →
0010 - 执行(Execute)→ 4 →
0100 - 删除(Delete)→ 8 →
1000
这种设计靠的是 1 :比如 <code>1 就是 <code>4,1 就是 <code>8,天然避免位重叠。
用按位或(|)组合多个权限
用户拥有“读 + 写 + 删除”,就把对应数值相或:
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
const userPerm = READ | WRITE | DELETE;- 即:
1 | 2 | 8→ 二进制0001 | 0010 | 1000 = 1011→ 十进制 11
结果 11 就是该用户的完整权限码,只占一个 number,可存在 cookie、token 或数据库字段里。
用按位与(&)判断是否具备某权限
检查用户有没有“写”权限,只需:userPerm & WRITE
- 若结果非零(如
11 & 2 === 2),说明有该权限 - 若结果为 0(如
11 & 4 === 0),说明没有“执行”权限
原理很直接:只有目标位上两个数都是 1,& 才返回非零值。这是最轻量的布尔判断,比数组 includes 或对象属性查找都快。
实际代码片段参考
定义常量
const READ = 1 << 0; // 1 const WRITE = 1 << 1; // 2 const EXECUTE = 1 << 2; // 4 const DELETE = 1 << 3; // 8
校验逻辑
function hasPermission(perm, flag) {
return (perm & flag) !== 0;
}
if (hasPermission(userPerm, WRITE)) {
// 允许编辑
}

















