2013-10-24 2 views
1

보기에 [Authorize (Roles = "admin")]을 입력하면 사용자가 리디렉션 될 때 작동하지만 로그인 한 상태 임에도 불구하고 항상 로그인보기로 리디렉션됩니다. 어떻게 변경합니까? 이것은 오류 페이지 나 비슷한 것으로 간다.MVC 권한 부여 역할은 로그인보기로 이동합니까?

+0

언제이 리디렉션이 발생해야합니까? –

+0

글쎄, 컨트롤러 뷰 위에 Authorize를 두는 것만으로도 그 URL에 실제로 액세스 할 때마다 특정 역할에만 사용 가능하게 만들고 싶습니다. 해당 경로로 이동하고 역할에 있지 않은 순간에 로그인보기가 반환됩니까? – user1166905

+0

[사용자가 승인 된 역할을 수행하지 않은 경우 권한이없는 페이지를 어떻게 제공합니까?] (http://stackoverflow.com/questions/2322366/how-do-i-serve-up-an-unauthorized -page-when-a-user-not-authorized-role) – CodeCaster

답변

1

public class CustomAuthorize : AuthorizeAttribute 
    { 

     protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
     { 
      if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
       base.HandleUnauthorizedRequest(filterContext); 
      } 
      else 
      { 
       filterContext.Result = new RedirectToRouteResult(new 
       RouteValueDictionary(new { controller = "Home", action = "UnAuthorized" })); 

      } 
     } 
    } 

같은 사용자 지정 권한 부여 속성을 만들고이

[CustomAuthorize(Roles="admin")] 

희망처럼 사용할 수있는이

+0

나는이 말 그대로 내 대답을 그대로 표현했다. 그러나 기본적으로 나는 내가 한 것이므로 나는 네게 맞는 것으로 표시 할 것이다. – user1166905

+0

RedirectResult보다 RedirectToRouteResult를 사용 하시겠습니까? 그렇다면 왜? – user1166905

+0

저는 전문가 아니지만 하드 코드 된 경로로 인해 리 팩터링 중에 'RedirectResult'에 문제가있었습니다. –

0

가 중복 제공하는 대신에 내가 질문에서 코드를 사용하는 데 도움이 : Prevent FormsAuthenticationModule of intercepting ASP.NET Web API responses 및 그에 따라 수정 됨 :

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
public class AuthorizeCustom : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.IsAuthenticated) 
     { 
      filterContext.Result = new RedirectResult("/Error/Unauthorized"); 
     } 
     else 
     { 
      if (filterContext.HttpContext.Request.IsAjaxRequest()) 
      { 
       filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true; 
      } 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 
} 

그런 다음 "/ Error/Unauthorized"경로에 대한보기를 만들고 [Authorize] 속성을 [AuthorizeCustom]으로 변경했습니다. 이제 인증되지 않은 사용자는 예상대로 로그인하도록 리디렉션되고 역할이없는 사용자는 사용자 지정보기로 리디렉션됩니다.

관련 문제