Authorize标签如何工作? - ASP.NET MVC

时间:2009-08-29 05:30:40

标签: asp.net-mvc asp.net-membership

授权标签如何确定用户是否获得授权?

比如说,如果用户登录并且他们尝试转到具有Authorize标记的视图。它如何确定用户是否获得授权?它是否对数据库进行查询并检查?

如果他们使用角色授权进入视图怎么样?它是否查询成员资格角色表?

我只是想知道,因为我有ASP.NET成员资格表认为重复的userNames。我使用了大量的字段来确定哪个用户是什么,允许用户拥有相同的重复userName,但在我的数据库中仍然是唯一的。

这导致我必须为许多.NET成员资格编写自定义方法,因为它都使用“userName”来搜索而不是使用UserId。

所以我现在想知道Authorize标签是否会出现这种情况。因为我不知道它是如何工作的,如果我不使用.NET成员资格,我就不知道它将如何决定它。

2 个答案:

答案 0 :(得分:26)

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]标记。

答案 1 :(得分:16)

ControllerActionInvoker解析属性,并在检查凭据时调用OnAuthorization()

AuthorizationAttribute.OnAuthorization()方法基本上会检查User.Identity.IsAuthenticated是否为真。这只是利用FormsAuthentication的功能或您可能正在使用的任何其他身份验证方案。