0

ASP.NET MVC 3を使用してプロジェクトを開発していますが、現在はMembershipProvider、RoleProvider AuthorizeAttribute、およびcustomを使用しています。したがって、コードの特定の部分でこれを使用します。

[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(文字列username)メソッドを使用して、ロールをチェックします。どのメソッドでユーザーをチェックできますか?

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 に答える