我正在尋找在.net中進行高級授權(不驗證)的現有解決方案。要求如下:.net中的高級授權策略
- 定義應用程序實體上的自定義應用程序操作。說「會議」實體的操作「更新」。
- 授予用戶「用戶1」僅對ID = 1的實體「會議」執行操作「更新」。
- 當執行操作「更新」時,檢查當前用戶(「用戶1」)是否有權訪問「 「ID爲1的實體。
所以我需要一些現有的解決方案來授權特定對象進行操作。據我所知,一些解決方案(AzMan)提供授權功能,但僅限於作爲單位的操作(不適用於具體對象)。
我正在尋找在.net中進行高級授權(不驗證)的現有解決方案。要求如下:.net中的高級授權策略
所以我需要一些現有的解決方案來授權特定對象進行操作。據我所知,一些解決方案(AzMan)提供授權功能,但僅限於作爲單位的操作(不適用於具體對象)。
你可以用PrincipalPermissionsAttribute
這樣的東西來做到這一點。如果您正在處理Windows授權和諸如AzMan之類的事情,您可以簡單地創建用戶分配角色並將其登錄到您的應用程序(或使用當前登錄的用戶信息)。如果您想使用自定義身份驗證,則必須自己處理角色,並將Thread.CurrentPrincipal
設置爲GenericPincipal
之類的內容。然後,您可以在方法上使用PrincipalPermissionsAttribute
以確保只有具有特定角色的主體並執行該方法。例如:
[PrincipalPermission(SecurityAction.Demand, Role = @"UserUpdater")]
public void UpdateUserName(string name)
{
//...
}
如果你想自己做的授權,一旦你授權的用戶,您可以用類似設置校長:
var identity = new GenericIdentity("Bill");
var roles = new[] { @"UserUpdater" };
var principal = new GenericPrincipal(identity, roles);
Thread.CurrentPrincipal = principal;
你必須處理SecurityException
當沒有該角色的用戶調用該方法時。假定是別的東西檢查角色,並且根本不執行該方法...
感謝您的回答。其實我看起來有點不同的解決方案。我想授權代表真正獨特實體(比如會議)的類的特定實例,而不是靜態類。 – Jekas
本質上沒有什麼可做的。對象本身必須對「CurrentPrincipal」角色執行檢查。這可以通過裝飾模式和策略模式來完成,以使其與實體分離。或者,您可以使用AOP將呼叫攔截到實體中,並在將其傳遞給對象之前將其替換爲安全檢查;但是AOP在.NET中通常很棘手。 –
您是否想要根據特定用戶授權特定類授權的實例? –
我的意思是特定的實體。 「會議」實體描述了真實事件。我有一個關於數據庫和類中代表它在程序中的事件的記錄。 – Jekas