2010-01-05 64 views
6

我在表中存儲「用戶」列表。應用程序的業務邏輯將具有對當前登錄用戶的此表中所有數據的對象的引用。並且如果用戶擁有正確的訪問權限,則可以允許用戶執行操作。在數據庫中存儲用戶訪問級別

我想知道什麼是存儲「訪問級別」的最佳方式?

我想存儲訪問級別的一種方式是整數,並且使用C#「標誌」來組合多個訪問級別而不需要一堆字段,這是明智的嗎?

Create = 1 
Read = 2 
Update = 4 
Delete = 8 
FullAcc = 16 

我在想的另一種選擇,感覺不太高貴,但我已經看到它做了很多:

Read/Write = 1 
R/W + Delete= 2 
Full Access = 3 

我想知道的原因,是它喜歡它似乎在第二種方法中添加更多項目會更加簡單,但在某些時候,這將成爲維護方面的一個痛苦。你怎麼看?

回答

5

我一直喜歡使用標誌的第一種方法。危險在於你獲得了太多的權限級別,你必須繼續擴展你的枚舉並開始使用巨大的數字,因此可能必須將數據庫中的數據類型更改爲大的int。但是,對於類似權限的選項數量應該相當有限。我建議的一個建議是將FullAcc定義爲創建,讀取,更新和刪除的總和,而不是作爲單獨的實體。這樣,您就不必在用戶嘗試更新某些內容時檢查用戶是否具有更新或FullAcc權限。

3

我會選擇#1,因爲它給了我每種訪問類型的單獨標誌。

我還建議您存儲具有時間戳的更改歷史記錄。

1

我會去枚舉路線。它的強類型,在數據庫和代碼之間轉換得很好(ints和enums可以很好地轉換),你可以使用FlagsAttribute來組合安全權限,並且枚舉在版本問題上非常靈活(只要你不刪除或者重命名以前定義的枚舉值)。

1

你的'旗幟'的想法更加靈活,讓你的權利的任何組合,如果有必要的話。該「FullAcc」項不應該被定義爲您的枚舉但是具體的數字, - 它應該是邏輯或運算,其他標誌的組合(這個樣子,還剩下了幾個):

enum Rights { Create, read, Update, FullAcc = Create | Read | Update } 

的只有我看到的這種情況是,如果向枚舉中添加更多項目,則必須修改FullAcc項目,然後在db中標識您的FullAcc記錄並更新標誌值。

相關問題