TS使用逻辑位运算符实现权限管理及校验

enum Permission {
  Read = 1, // 0001
  Write = 2, // 0010
  Create = 4, // 0100
  Delete = 8, // 1000
}

// 组合权限
// 两个数字换算成二进制后进行的运算
// 0001 | 0100 得 0101
let p: Permission = Permission.Read | Permission.Create;

// 如何判断包含某个权限? 判断tarage是否包含per
// 使用 & 且运算
function hasPermission(target: Permission, per: Permission): Boolean {
  return (target & per) === per;
}

// p = 0101,Permission.Create = 0100
// > (0101 & 0100) = 0100 
// > (0101 & 0100)=== 0100  返回 true, 存在该权限
console.log("权限判断-Create", hasPermission(p, Permission.Create)); // true

// 如何删除权限
// 使用 ^ 运算符
// 0101 ^ 0100 = 0001 (0001 === Permission.Read)
// Create权限就被去除了,只剩下了Read权限
p = p ^ Permission.Create;

console.log("权限判断", hasPermission(p, Permission.Create)); // false

逻辑位运算符用法
http://c.biancheng.net/view/5469.html

posted @ 2022-05-20 10:42  Wuxiaoyi  阅读(229)  评论(0编辑  收藏  举报