好問題。這是我做的...
我決定讓我的權限數據庫驅動,所以我需要一種方法來將字符串轉換爲「類型」的東西,以便我可以獲得編譯時警告,也可以更改名稱在數據庫中的權限,而不必更新我們所有的生產代碼。由於屬性是基於字符串的(所謂的魔術字符串),因此我決定不使用枚舉並使用T4腳本讀取數據庫併爲每條記錄生成一個結構。這使我還可以添加諸如顯示名稱,權限的詳細信息以及可顯示用戶的錯誤消息等內容。
這是T4模板運行後的示例權限行。
public struct CanViewClaimData
{
// Using const allows the compiler to generate the values in the assembly at compile time and satisfy MVC Authorize Attribute requirements for const strings.
public const System.String Name = "CanViewClaimData";
public const System.String DisplayName = "Can View Claim Data";
public const System.String Description = "The allows users to view claim data";
public const System.String DefaultErrorMessage = "You must have the \"Can View Claim Data\" permission to access this feature.";
}
然後在代碼中我使用歸類授權子和標記的行動本身,
[Security.AuthorizedAttribute(Roles = CanViewClaimData.Name, Message = CanViewClaimData.DefaultErrorMessage)]
每個自動生成過程中
然後推到我們的C.I.環境中,我運行T4模板作爲構建過程的一部分,以保持結構字符串與數據庫同步。
到目前爲止,這一切都非常有效,並允許我們的產品所有者能夠在數據庫中編輯權限名稱,說明等,而無需開發人員參與。
有一些方法可以使用枚舉? –
對不起,沒有其他辦法。在這種情況下,常量與Enum非常相似。 – Win