2013-04-24 3 views
0

클래스에 사용자 지정 특성을 추가하여 로그인 한 사용자가 admin인지 확인했습니다. 그러나 그것은 작동하지 않습니다. 여기에 사용자가 관리자인지 확인합니다 세션에서 사용자 데이터를 가지고 여기에 일을하고 그 관리자에 있지 않은 경우 다음 거부 페이지에 액세스 리디렉션하고 무엇 내 코드사용자 지정 인증 특성이 작동하지 않습니다.

[AdminAuthorization] 
public class UsersController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

public sealed class AdminAuthorizationAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if(!UserSessionHelper.Instance.IsValid && !UserSessionHelper.Instance.Data.IsAdmin) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Error", action = "AccessDenied" })); 
     } 
    } 
} 

입니다. 그러나 이것은 효과가 없습니다. 모든 사용자에게 페이지가 표시됩니다.

답변

2

내 이해에 따라 OnAuthorization 기능을 무시해야합니다.

변경 당신에게 AdminAuthorizationAttribute 클래스

public sealed class AdminAuthorizationAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //Called when a process requests authorization. 
     if (!UserSessionHelper.Instance.IsValid && !UserSessionHelper.Instance.Data.IsAdmin) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Error", action = "AccessDenied" })); 
      return; 
     } 
     base.OnAuthorization(filterContext); 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     //Processes HTTP requests that fail authorization. 
    } 
} 
+0

+1 감사하고 작동 .. –

관련 문제