在C#中這是很常見找到以下枚舉結構非二進制枚舉標誌
[Flags]
public enum Permission
{
Read = 1 << 1,
Create = 1 << 2,
Update = 1 << 3,
Destroy = 1 << 4
}
,它允許你加入枚舉這樣的:Permission.Read|Permission.Create
我現在面對的是一個不同的排序要求,我提出的解決方案是有問題的國際海事組織。
我需要讓某種枚舉實現多種類型premissions的 - 有些矛盾的,有些是不
,我想下面的排序功能
[Flags]
public enum Permission
{
Read1 = 1,
Read2 = 2,
Read3 = 3,
Write1 = 10,
Write2 = 20,
Write3 = 30,
Update1 = 100,
Update2 = 200,
Update3 = 300,
Destory = 1000,
Other = 10000,
SomethingElse = 100000,
}
當這億韓元」 t工作Permission.Read1|Permission.Read2
主要是因爲它意味着用戶現在擁有讀取權限級別3
除了對每個權限使用不同的位標誌(這將需要我的db保存比INT更大的整數,不好的理由),或者每個權限有不同的枚舉(和列)(這會限制我的權限靈活性),並且沒有編譯時驗證的形式(我想我可以創建某種工作環境的運行時驗證)有沒有其他的想法?
它是一種不同類型的權限,或者它是不同的權限對象?即。 Read1在對象類型XXX上讀取,在YYY上讀取2和Read3 ...等等? – Igor
這個結構主要是爲了說明。實際權限調整爲不同資源的權限級別,如在Read1..3中爲對象xxx,Write1..3爲對象YYY – gilmishal
然後您應該更改結構。如果它是一個類型,它將具有2個屬性:'PermissionFlags','ObjectType'(對於關係數據庫中的表,2列相同)。 ObjectType應該是權限適用的東西。儘可能保持您的權限。我懷疑是否有解決方案可以讓你在編譯時捕獲權限的非法組合,你將不得不在數據庫中創建運行時驗證和/或添加驗證邏輯。 – Igor