2011-09-27 40 views
3

我正在使用C#(.NET 4.0)中的Windows應用程序,並且需要某些內容來實現一些基本的ACL規則,或者更具體地說,應用基於用戶類型的某些配置。C#Windows應用程序中的基於許可證的配置

該應用程序具有許可證密鑰,我們可以使用這些許可證密鑰來確定用戶類型(即用戶,安裝人員,工程師)以及其他信息。

根據用戶的類型,某些功能,菜單,按鈕和顯示數據將有所不同。我可以在應用程序中根據用戶類型硬編碼顯示和隱藏這些元素,但是我們有一個權限矩陣來定義權限,因此我想創建一個ACL,以便我們可以輕鬆地將矩陣審覈到應用程序代碼。

我已經環顧四周,但System.Security命名空間中的很多ACL和安全代碼似乎都是針對Windows和文件系統ACL製作的。

有人可以推薦任何現有的類(最好是免費的),在C#中實現簡單的ACL。

我只需要能夠做這樣的事情:

ACL acl = new ACL(); 
acl.addRole("User"); 
acl.addRole("Manufacturer"); 

acl.addResource("SpecialButton"); 

acl.deny("SpecialButton"); 
acl.allow("SpecialButton", "Manufacturer"); 

// so later in my app I can do 

theUserType = "Manufacturer"; 
// ... 
if (acl.isAllowed(theUserType, "SpecialButton")) { 
    SpecialButton.Visible = true; 
} 

我不希望嘗試在運行時使用代碼篡改停止的人,如果他們想走出自己的路來那麼他們可以做到這一點,但我想要一種簡單的方法來創建和查詢ACL,以確定GUI的外觀以及在基於密鑰加載程序時可用的選項。

很容易創建這個,但如果已經完成,那就更好了。

+1

我會避免術語ACL相對於這個,因爲它是不同的(與System.Security東西重疊)。您正在考慮的是基於許可證的配置。 – Deleted

回答

1

真的沒有太多的你在說什麼。

您有角色和角色有屬性。一個屬性可能會出現在一個或多個角色中。夠簡單。

許可證密鑰定義使用中的角色。從中可以加載屬性列表(「OPENCONTACT」,「EDITCONTACT」,DELETECONTACT)或名稱值對(100 = OPENCONTACT,101 = EDITCONTACT等),可以是單獨的字符列表(012)你可以用AzMan來做這件事,它比你想要的要多一點。

角色/屬性列表可以提供爲需要在運行時加載加密的資源...

+0

這聽起來像是一個適合的好方法。您是否發現通過代碼在運行時設置規則時遇到的任何問題,而不是使用具有適用於每個組的適當用戶權限的加密資源?我想出了一些你可以看到的基本代碼[這裏](http://pastebin.com/FJ5ZBudh)。你是否看到任何固有的缺陷或問題?謝謝! – drew010

+0

@ drew010:看起來很好。該代碼相當易於維護且易於添加。另外,如果您想將關聯存儲在數據庫或其他文件中,則轉換看起來相當容易。 – NotMe

1

如果您要將應用程序部署到Windows 7或Windows Server 2003/2008,則可能需要考慮使用Windows附帶的免費授權管理器功能。

有關Microsoft的完整概述,請參閱here

本質上,它允許您定義角色,每個角色可以執行的任務以及每個任務中允許的操作。

有一個API可供您從C#應用程序中查詢授權存儲,以便您可以查詢哪些操作可用於特定角色。這將使您返回分配給該角色的操作號碼的聚合列表。然後,您可以測試是否存在特定的操作(或者是否缺少)並相應地自定義您的UI。

HTH, Dean。

+0

我已經看到了,但最初看起來比我們需要的更多。另外,我們計劃支持Windows XP客戶端。我發現他們可以將XML文件用於角色,這是很好的,因爲規則基本上會內置到應用程序中,而不是從中央源獲取或驗證。該應用程序獨立運行在全球多個用戶的個人電腦上,不依賴於活動的網絡連接。 – drew010

+0

顯然你可以讓它在XP上運行[鏈接](http://consultingblogs.emc.com/stuartpreston/archive/2005/03/17/1147.aspx)。也不需要有活動的網絡連接;它可以是獨立的。 – DeanOC

相關問題