替代使用位掩码创建用户权限

时间:2012-09-27 14:02:59

标签: language-agnostic permissions bitmask

因此我们编写的应用程序具有用户可以拥有的某些权限,并且最初我们只创建了一个简单的位掩码,并将每个权限保存为一个单独的位,并将最终值作为long存储到我们的数据库表中。但是现在我们拥有如此多的权限,以至于该值不再适合数据库中的long。我想我们可以将它存储为一个字符串而不是一个长的并进行转换,但它让我想知道这是否是解决问题的最佳方法。

例如:用户有权限1-3-5-7

他的安全值是2 ^ 0 + 2 ^ 2 + 2 ^ 4 + 2 ^ 7 = 149

但是一旦我拥有100个权限,这种方法看起来有点乱,因为计算2 ^ 99看起来很昂贵而且难以在数据库表中查看(因为它大于长整数,所以必须存储为字符串)。因此,当权限数量变得非常大并且不会太复杂时,是否有人有不同的方法来解决此问题?

2 个答案:

答案 0 :(得分:1)

我相信我找到了最好的方法,所以我会继续回答我自己的问题,因为它已经开放了很长时间。最好的方法似乎是在数据库中创建一个将用户与权限联系起来的XRef表,如下所示。

安全表:

ID | User Right
--------------------------
1  | Able to edit records
2  | Able to create records
...etc

用户表:

ID | Username
--------------
1  | Kevin
2  | Bob
3  | Bill

XRef表:

UserID | SecurityID
--------------------
1      | 1
1      | 2
2      | 2
3      | 1
3      | 2

这允许您拥有任意数量的权限,而不限于基于长度创建权限的长度。

答案 1 :(得分:0)

您可以添加第二个长列。如果权限的索引大于x,您可以在第二列中查找(或存储)吗?