2009-08-29 1200 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的功能或者您可能使用的任何其他认证方案。