我的任务是使用按位运算符创建权限系统,有人问我,如果我们需要超过32个权限,那么我们现在有这样的:
enum permissions {
none = 0,
Founder = 1 << 0,
SeeAdmins = 1 << 1,
EditAdmins = 1 << 2,
SeeText = 1 << 3,
EditText = 1 << 4,
PublishWork = 1 << 5
}
哪个是可以管理的,但是我们添加超过32个并不是不可想象的,快速测试给了我这些结果:
1 << 30 = 1073741824
1 << 31 = -2147483648
1 << 32 = 1
甚至可能有超过32个字节的值这样吗?
在这种情况下,权限的数量几乎是无限的。但它不涉及二进制掩码,您需要考虑如何在数据库中构建权限。
例如,您可以继续向Permission
枚举中添加项目,甚至不给它编号。 Typescript will convert that to auto-incrementing numbers。像这样
enum Permissions {
none,
Founder,
SeeAdmins,
EditAdmins,
SeeText,
EditText,
PublishWork
}
在前端层,您的“权限组”可能是一组简单的权限
const accountantPermissionGroup = [
Permissions.SeeTransactions,
Permissions.WriteSomeReport,
Permissions.MoveFunds
];
BigInt有
1n << 64n
18446744073709551616n
BigInts支持最常见的运营商。二进制+, - ,*和**都按预期工作。 /和%工作,并根据需要舍入为零。按位运算|,&,<<,>>和^执行按位运算,假设负值的二进制补码表示,就像它们对数字一样。