2012-12-11 50 views
0

我想使用內置的ASP.NET成員資格機制,但對我來說似乎還不夠。它只允許人們完成一堆任務(角色)。我可以允許一個人,但似乎很難否認一個人;允許會計部門的人員。查看敏感信息,但如何拒絕該部門的特定人員?我必須創建AccountDept和AccountDeptNoSensitiveData角色,等等......如果有很多活動比混亂。允許/拒絕用戶執行特定活動的最佳方式是什麼?

具有允許/拒絕機制的舊經典組和用戶在我的情況下要好得多。然而,我不想重塑已經發明的東西,如果有的話,這就是我要求在這裏:

對於基於表單的身份驗證,是否有任何擴展變體的ASP.NET Membership機制或另一個好的「框架/樣板/現成「,哪一個允許我授權/拒絕人們在我的應用程序中執行任務?

回答

1

基於聲明的授權可能是您要查找的內容。用戶不是具有特定角色和角色附帶的所有授權,而是擁有一個聲明,這可以啓用更細粒度的允許/拒絕檢查。

MSDN

這使得能夠更爲粒度比可通過純RBAC (基於角色的訪問檢查),其中許多權限是典型地在單個角色收集 。更重要的是,基於聲明的 授權可以更好地分離業務邏輯和授權策略,因爲可以針對代碼中的資源執行特定的 操作的權限並且可以使用後端策略中的 配置聲明呈現實體必須擁有以滿足需求的 。

這是一個很不錯的播客從.NET岩石熟悉的主題:Dominick Baier Walks Us Through Claims-Based Security!

在ASP.NET 4.5中,使用表單身份驗證和System.Security.Claims名稱空間時,核心框架被配置爲執行基於權限的授權。 Page.User對象可以投射到ClaimsPrincipal。您可以檢查校長的主張並根據該主張進行決策,即是否允許執行某個操作。有關在ASP.NET中如何完成的說明,請參閱ClaimsAuthorizationManager

您的代碼可能會變得更加複雜,但它應該少於管理頭痛,然後嘗試匹配多個角色定義中的所有可能授權組合。

+0

這是我的理解是,索賠更專注於身份驗證而不是授權。自從我上次查看索賠以來已經有一段時間了,所以我要去做那件事。 –

+0

@SimonHalsey我添加了一個指向ClaimsAuthorizationManager類的鏈接,更詳細地解釋瞭如何根據聲明授權資源。 –

+0

嗯。 ClaimsAuthorizationManager至少有一個checkaccess方法,但它似乎仍然需要某種API將角色的權限綁定。即使所示的示例僅使用組或角色成員身份來確定訪問權限。我再一次對WIF並不完全熟悉,但似乎只是另一種方式來做我下面所說的,但以聯合的方式。 –

1

在我看來有一個缺失的部分,這是下一個級別 - 權利或操作。授權管理器有這些,但沒有它的本地API。使用AzMan基於COM的api是邪惡的。

本質上,當你想做某件事時,你會檢查用戶是否有權利。這些權利收集在您分配給用戶的角色中。這使您可以對角色可以執行的操作進行細粒度的細粒度控制,而無需數百萬或角色。

不幸的是,我不知道那裏有什麼給你一個「權利API」。我爲我的應用程序創建了自己的應用程序&我查看的大多數應用程序似乎都在自己的應用程序中。

0

也許我可以繼續使用內置的ASP。NET會員提供和使用角色的組和不停的問「是用戶角色」了:

User.Identity.IsAuthenticated && Roles.IsUserInRole(user, role) 

相反,我可以添加任務列表,權限列表如下圖所示:

Tasks 
    Task1 name="Accounting" 
     Allow roles="Accounting", "Executive" 
     Allow users="SalesPerson1", "OtherPerson2" //Granted people 
     Deny users="AccountingPerson1" //Banned person 

,並詢問用戶的許可

User.Identity.IsAuthenticated && MyCustomSecurity.HaveRight(user, task) 

好,有人已經做了什麼,我提到:

http://permissionmanager.codeplex.com/

0

要回答你的問題,基本上有兩種方法來允許/拒絕用戶訪問資源或執行特定活動。

  1. 禁用所有內容或禁止所有內容(所有控件或組件),然後通過權限授予訪問權限以打開可能性。這種方式是最安全的方式,除非他/她已被授予該行動,否則用戶將無法做任何事情。
  2. 默認情況下允許所有內容,然後分配限制以禁止或禁用操作。這是更快的方式,您需要在此情況下通過權限創建更少的限制

ASP.net成員資格是一個功能,它在粒度,安全性,操作審覈等方面有點受限,仍然如果時間不是限制,你可以擴展它。

相關問題