2009-08-29 304 views
27

授權標籤如何確定用戶是否被授權?Authorize標籤如何工作? - ASP.NET MVC

就像說,如果用戶登錄,他們試圖去一個具有授權標籤的視圖。它如何確定用戶是否被授權?它是否對數據庫執行查詢並檢查?

如果他們轉到具有角色授權的視圖,該怎麼辦?它是否查詢成員資格角色表?

我只是想知道,因爲我有ASP.NET會員表認爲重複的userNames。我使用嚴重的字段來確定哪個用戶是什麼,允許用戶擁有相同的重複userName,但在我的數據庫中仍然是唯一的。

這使我不得不爲許多.NET成員資料編寫自定義方法,因爲它全部使用「userName」來執行搜索而不是使用UserId。

所以我現在想知道這可能是Authorize標籤的情況。因爲我不知道它是如何工作的,並且就像我不使用.NET成員一樣,我不知道它將如何確定它。

+0

我沒有直接回答你的問題,但要記住,ASP.NET MVC是開源的,你可以自己檢查一下。我會認爲它只是問會員提供商。 – JoshJordan 2009-08-29 05:48:47

回答

24

Authorize標記使用ASP.NET中的所有內置成員資格檢查。這很容易扮演你自己的標籤。例如:

public class MyAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) throw new ArgumentNullException("httpContext"); 

     // Make sure the user is authenticated. 
     if (httpContext.User.Identity.IsAuthenticated == false) return false; 

     // Do you own custom stuff here 
     bool allow = CheckIfAllowedToAccessStuff(); 

     return allow; 
    } 
} 

然後您可以使用[MyAuthorize]標記,它將使用您的自定義檢查。

+0

成員身份檢查工作是如何工作的?它使用userName還是UerId? – chobo2 2009-08-29 06:03:37

+0

我不是100%確定,但我認爲主要檢查httpContext.User.Identity.IsAuthenticated並返回它的值,但我知道它也有檢查角色的能力。 – Kelsey 2009-08-29 06:08:19

+0

嗯我不知道它似乎無法正常工作我仍然可以看到頁面。它只是在我的網址中放入返回網址,以及它的相關信息。 – chobo2 2009-09-28 05:33:40

14

ControllerActionInvoker解析屬性並在檢查憑據時調用OnAuthorization()

AuthorizationAttribute.OnAuthorization()方法基本上檢查User.Identity.IsAuthenticated是否爲真。這只是利用了FormsAuthentication的功能或者您可能使用的任何其他認證方案。