位运算与权限控制

86 阅读1分钟

位运算,平常工作中用的比较少, 但是不代表不重要,记录一下位运算的基本使用以及在权限控制方面的使用。现有的权限控制是数组来控制,但这种方式在某些场景下可能会显得笨重和低效。位运算提供了一种高效的处理多个状态或选项的方式。

规则

按位与

同为一则输出一,否则为零(&)

按位或

有一则一,无一则零(|)

异或

相同为零,不同为一(^)

按位非

按位取反(~)

权限控制举例

简单设置四个权限,增删改查(0b为二进制表示)

let permissions={
add:0b1,
delete:0b01,
update:0b100,
select:0b1000
}

给用户设置权限

let user={
permissions:permissions.add|permissions.delete|permissions.update|permissions.select
}

此时打印会发现user.permissions=15,转化为二进制则表示为0b1111

验证权限

以往的方法是后端返回权限数组,前端通过arr.includes(permission)来判断,通过位运算可以直接用按位与来验证

比如我们验证是否含有add权限

if (user.permissions&permissions.add) {
console.log('有添加权限');
}else{
console.log('没有添加权限');
}

如果有add权限,user.permissions&permissions.add的值会等于permission.add 的值,没有则为0

增加权限

直接按位或

user.permissions=user.permissions|permissions.select;

删除权限

直接异或(准确的说是修改权限,如果已有的权限会删除,没有的权限会添加)

console.log(user.permissions.toString(2))
user.permissions^=permissions.select;
console.log(user.permissions.toString(2))