0

我正在使用 ASP.NET MVC 3 开发一个项目,现在使用 MembershipProvider、RoleProvider AuthorizeAttribute 和自定义。所以在代码的某些部分使用这个:

[Logon(Roles = "login, test1")]

此代码完美运行,可在 MembershipProvider 代码中使用:

public override string [] GetRolesForUser (string username)
{
    var = UsuarioRepository.GetListaPermissoesByUsuarioEmail permissions (username);

    if (permissions == null)
    {
        nullPermissao var = new string [0];
        nullPermissao return;
    }

    return permissions;
}

我的问题是。如何使用以下代码,需要自定义哪种方法?我要检查的是确定是否登录了特定类型的用户以及它是否具有某些权限。

[Logon(Roles = "login, test1," Users = "User1")]

使用覆盖字符串[] GetRolesForUser(字符串用户名)方法检查角色,我可以用哪种方法检查用户?

4

2 回答 2

1

这应该使用 AuthorizeAttribute 开箱即用。它检查 HttpContext.User.Identity.Name 是否与您在 AuthorizeAttribute.Users 下定义的任何术语匹配

正如我从评论中看到的,您在可能覆盖了 OnAuthorize 方法的地方推出了自己的 LogonAttribute。这就是 AuthorizeAtrribute 的神奇之处。

原始 ASP.NET MVC 源

protected virtual bool AuthorizeCore(HttpContextBase httpContext)
{
  if (httpContext == null)
    throw new ArgumentNullException("httpContext");
  IPrincipal user = httpContext.User;
  return user.Identity.IsAuthenticated && (this._usersSplit.Length <= 0 || Enumerable.Contains<string>((IEnumerable<string>) this._usersSplit, user.Identity.Name, (IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase)) && (this._rolesSplit.Length <= 0 || Enumerable.Any<string>((IEnumerable<string>) this._rolesSplit, new Func<string, bool>(user.IsInRole)));
}

public virtual void OnAuthorization(AuthorizationContext filterContext)
{
  if (filterContext == null)
    throw new ArgumentNullException("filterContext");
  if (OutputCacheAttribute.IsChildActionCacheActive((ControllerContext) filterContext))
    throw new InvalidOperationException(MvcResources.AuthorizeAttribute_CannotUseWithinChildActionCache);
  if (this.AuthorizeCore(filterContext.HttpContext))
  {
    HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
    cache.SetProxyMaxAge(new TimeSpan(0L));
    cache.AddValidationCallback(new HttpCacheValidateHandler(this.CacheValidateHandler), (object) null);
  }
  else
    this.HandleUnauthorizedRequest(filterContext);
}
于 2012-06-21T13:40:53.620 回答
0

您的意思是使用以下内容吗?

[Authorize(Roles = "login, test1", Users = "User1")]
于 2012-06-21T13:13:11.487 回答