javascript中用位运算处理用户权限,将各权限映射为2的幂次值(如view=1、edit=2、delete=4、approve=8),后端返回权限整数(如13=1|4|8),前端通过按位与(&)判断权限,推荐用常量对象管理权限值。

JavaScript 中对接口返回的用户权限列表做位运算处理,核心是把权限抽象为二进制位,用整数(通常是 32 位有符号整数)表示多个权限的组合。这种方式高效、省内存,适合权限状态频繁判断的场景。
权限如何映射到位(bit)
每个权限对应一个唯一的 2 的幂次值(即只有一位为 1 的二进制数):
-
查看 →
1(0b0001) -
编辑 →
2(0b0010) -
删除 →
4(0b0100) -
审核 →
8(0b1000)
后端通常返回一个整数(如 13),它等于各权限值的按位或结果(例如:查看|编辑|删除 = 1 | 2 | 4 = 7;查看|删除|审核 = 1 | 4 | 8 = 13)。
前端解析权限整数并判断是否拥有某权限
使用按位与(&)操作符判断:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
permissionValue & PERMISSIONS.VIEW !== 0→ 有查看权限 -
permissionValue & PERMISSIONS.EDIT结果非零即有编辑权
推荐预先定义权限常量对象,避免魔法数字:
const PERMISSIONS = {
VIEW: 1
常见操作示例(含工具函数)
假设接口返回 { permissions: 13 }(即二进制 0b1101,含查看、删除、审核):
-
判断单个权限:
13 & PERMISSIONS.VIEW→1(真值)✅ -
判断多个权限同时存在:
(13 & (PERMISSIONS.VIEW | PERMISSIONS.DELETE)) === (PERMISSIONS.VIEW | PERMISSIONS.DELETE)✅ -
添加权限(如赋予编辑):
13 | PERMISSIONS.EDIT→15 -
移除权限(如取消删除):
13 & ~PERMISSIONS.DELETE→13 & ~4 = 9(0b1001)
注意事项和边界提醒
JavaScript 使用 32 位有符号整数进行位运算(超出会截断),所以最多支持 31 个独立权限(第 32 位为符号位)。若权限数较多,建议:
- 拆分为多个整数字段(如
permsLow/permsHigh) - 改用
BigInt(需确保运行环境支持且前后端一致) - 避免直接对浮点数或字符串做位运算(会隐式转为 32 位整数,易出错)
实际项目中,建议封装一个权限校验类或 hook(如 usePermission(13)),统一管理判断逻辑和缓存。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










