我的任务是使用按位运算符创建权限系统,有人问我,如果我们需要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/

10-10 19:14