因此我们编写的应用程序具有用户可以拥有的某些权限,并且最初我们只创建了一个简单的位掩码,并将每个权限保存为一个单独的位,并将最终值作为long存储到我们的数据库表中。但是现在我们拥有如此多的权限,以至于该值不再适合数据库中的long。我想我们可以将它存储为一个字符串而不是一个长的并进行转换,但它让我想知道这是否是解决问题的最佳方法。
例如:用户有权限1-3-5-7
他的安全值是2 ^ 0 + 2 ^ 2 + 2 ^ 4 + 2 ^ 7 = 149
但是一旦我拥有100个权限,这种方法看起来有点乱,因为计算2 ^ 99看起来很昂贵而且难以在数据库表中查看(因为它大于长整数,所以必须存储为字符串)。因此,当权限数量变得非常大并且不会太复杂时,是否有人有不同的方法来解决此问题?
答案 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,您可以在第二列中查找(或存储)吗?