我的任务是使用按位运算符创建权限系统,有人问我,如果我们需要超过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个字节的值吗?
答案 0 :(得分:1)
在这种情况下,许可的数量实际上是无限的。但这不涉及二进制掩码,您需要考虑如何在数据库中构造权限。
例如,您可以继续向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
];
答案 1 :(得分:1)
BingInt
1n << 64n
18446744073709551616n
BigInts支持最常见的运算符。二进制+,-,*和**全部 按预期工作。 /和%工作,并根据需要舍入为零。 按位运算|,&,<<,>>和^执行按位算术 假设负数用二进制补码表示, 就像他们对数字所做的一样。