2012-06-21 5 views
0

ASP.NET MVC 3을 사용하여 프로젝트를 개발 중입니다. 이제 MembershipProvider, RoleProvider AuthorizeAttribute 및 custom을 사용합니다. 그래서 코드 사용이의 특정 부분에 :ASP.NET MVC 3 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 (캐릭터 이름) 방법을 사용하여 내가이 사용자를 확인할 수 있습니다 느릅 나무 방법에서 역할을 확인?

+0

특정 사용자에 대한 방법에 대한 액세스를 제한하려고합니까? – bluevector

+0

질문을 이해할 수 없습니다. 무엇을 성취하려고합니까? –

+0

죄송합니다. 잘못된 방식으로 입력했습니다. 실제로는 AuthorizeAttribute 클래스에서 만든 사용자 지정 특성 인 "로그온"입니다. –

답변

0

다음을 사용하셨습니까?

[Authorize(Roles = "login, test1", Users = "User1")] 
+0

재정의 문자열 [] GetRolesForUser (문자열 사용자 이름) 메서드를 사용하여 역할을 확인합니다. 그 방법으로 사용자를 확인할 수 있습니까? –

+0

정확히 무엇을 요구하고 있는지 확실하지 않지만 사용하기에 적합한 속성이며 기본 역할 및 멤버 자격 공급자를 재정 의하여 기본 aspnet 데이터베이스 테이블 이외의 사용자 및 역할을 사용자 지정하는 방법을 가질 수 있습니다. 그래도 대체 공급자를 사용하려면 web.config를 업데이트해야합니다. –

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); 
}