2012-09-27 54 views
0

所以我們正在寫的應用程序有一定權限的用戶可以擁有的,起初我們只是做了簡單的位掩碼,並保存每個特權作爲一個單獨的位和存儲的最終價值到我們的數據庫表作爲一個長期。但是現在我們擁有如此多的權限,以至於數據庫中的值不再適合長期使用。我想我們可以將它存儲爲一個字符串而不是很長的時間並進行轉換,但這讓我懷疑這是否是解決問題的最佳方法。替代與掩碼創建用戶權限

例如:用戶有權1-3-5-7

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

但一旦我有100權限這種方法似乎有點混亂,因爲計算2^99看起來很昂貴並且很難在數據庫表中查看(因爲它比較長,所以必須將其存儲爲字符串)。那麼,當許多權限變得非常大並且工作很快並且不太複雜時,任何人都有不同的方法來解決這個問題。

回答

1

我相信我找到了最好的方法,所以我會繼續回答我自己的問題,因爲它已經打開了這麼久。最好的方法似乎是在數據庫中創建一個將用戶關聯到權限的XRef表,像這樣。

安全表:

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

用戶表:

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

外部參照表:

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

這可以讓你只要你想,而不是侷限於有儘可能多的權限一個長的大小基於的創建權限。

0

你可以添加第二長列。如果權限的索引大於x,則在第二列中查找(或存儲)?