0

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

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

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

但是一旦我有 100 个权限,这种方法似乎有点混乱,因为计算 2^99 似乎很昂贵并且很难在数据库表中查看(必须将其存储为字符串,因为它比 long 大)。那么当权限的数量变得非常大并且工作迅速并且不太复杂时,是否有人有不同的方法来解决这个问题?

4

2 回答 2

1

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

安全表:

身份证 | 用户权限
--------------------------
1 | 能够编辑记录
2 | 能够创建记录
...ETC

用户表:

身份证 | 用户名
--------------
1 | 凯文
2 | 鲍勃
3 | 账单

外部参照表:

用户名 | 安全ID
--------------------
1 | 1
1 | 2
2 | 2
3 | 1
3 | 2

这使您可以拥有任意数量的权限,并且不限于创建权限所基于的 long 的大小。

于 2013-02-08T18:49:50.200 回答
0

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

于 2012-09-28T11:48:43.317 回答