【JS】位运算实现权限控制

前端路由鉴权可以使用位运算实现,大大降低多种权限组合的复杂度。

const READ = 0b1 // 0001
const WRITE = 0b10 // 0010
const UPDATE = 0b100 // 0100
const DELETE = 0b1000 // 1000

那么此时 1101 就代表 DELETE、UPDATE、READ 权限。

或运算 进行权限组合

let p = READ | UPDATE | DELETE // 1101

与运算 进行权限验证

let response = 13
if (response & READ) {
    
    
  console.log('可读')
}

异或 切换权限(原先有则删,没有则添加)

let response = 13
response ^= READ // response = response ^ READ
if (response & READ) {
    
    
  console.log('可读')
}

与运算配合异或 删除某权限

let response = 13
if (response & READ) {
    
    
  console.log('有权限,删')
  response ^= READ 
}

React的Lane模型也用到了位运算,使用 31 个 Lane,通过 位标志 来管理优先级。每个 lane 是一个 32 位整数的位,表示不同的优先级任务。

// Lane 常量
const SyncLane = 0b0000000000000000000000000000001; // 同步任务
const InputContinuousLane = 0b0000000000000000000000000000010; // 持续用户输入
const DefaultLane = 0b0000000000000000000000000000100; // 默认任务

// 合并不同 Lane
let lanes = SyncLane | InputContinuousLane; // 合并同步任务和用户输入任务

// 检查当前任务是否包含同步任务
if (lanes & SyncLane) {
    
    
  console.log('当前任务包含同步任务');
}

// 清除同步任务
lanes &= ~SyncLane;

猜你喜欢

转载自blog.csdn.net/owo_ovo/article/details/142919705