【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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田本初

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值