例如后台管理系统的权限校验,假设某一数据有增、删、改、查四项权限,他们各自只可能是有或没有两个情况,不同用户所拥有的权限不同但都是它们的组合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 这样做难以进行组合
// const CREATE = 1
// const DELETE = 2
// const UPDATE = 3
// const DETAIL = 4

const CREATE = 0b0001
const DELETE = 0b0010
const UPDATE = 0b0100
const DETAIL = 0b1000

// 用或运算组合权限
const user1 = CREATE | DELETE // 用户1具有CREATE和DELETE 权限
const user2 = DELETE | DETAIL | UPDATE // 用户2具有DELETE、DETAIL和UPDATE权限
console.log(user1.toString(2), user2.toString(2)) // -> 0011 1110

// 用且运算检查权限
const hasCreate = (user1 & CREATE) === CREATE // 检查用户1是否具有CREATE权限
console.log(hasCreate) // -> true