我的任务是使用按位运算符创建权限系统,有人问我,如果我们需要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个字节的值吗?
最佳答案
在这种情况下,许可的数量实际上是无限的。但这不涉及二进制掩码,您需要考虑如何在数据库中构造权限。
如果权限(准确的说是权限组)只是一个数字,那么二进制掩码就是要走的路。由于可以容纳一个数字
如果您想要更大的灵活性,只需为权限分配随机ID。然后创建具有自己的ID的权限组。这样,您实际上拥有无限数量的权限和控制
例如,您可以继续向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
];
关于javascript - 具有超过32个字节值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54763078/