2011-08-24 4 views
0
public class AdministratorAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      EFUserRepository repo = new EFUserRepository(); 
      var user = repo.FindUserByUserName(filterContext.HttpContext.User.Identity.Name); 
      if (user.UserRole.Name == "Administrator") 
      { 
       filterContext.Result = new RedirectToRouteResult(//Redirect to the original action they tried to enter? 
      } 
     } 
     else 
     { 
      //redirect to the "Home/Index" area. 
     } 
    } 
} 

이 OnActionExecuting 메서드 내에서 작업으로 리디렉션하는 중 문제가 발생했습니다. 또한 완전히 승인 된 경우 사용자를 원래 의도 한 동작으로 리디렉션하는 방법은 무엇입니까?ActionFilterAttribute를 구현하는 클래스에서 리디렉션

[Administrator] 속성은 많은 다른 컨트롤러에 배치 될 것이므로 도달하려는 적절한 ActionResult로 리디렉션 할 수있는 방법이 있어야합니다.

+0

'Authorize' 속성을 사용할 수 없습니까? '[Authorize (Roles = "Administrator")]'? – Chris

+0

나만의 맞춤 회원제 시스템이 있습니다. –

답변

0

이렇게하는 일반적인 방법은 적어도 GET을 위해 요청 된 URL을 URL 인코딩하고 포함시키는 것입니다. 예를 들어, SO에 대해 우리가 익명으로 this question에 시작하고 로그인을 클릭하면, 우리는

https://stackoverflow.com/users/login?returnurl=%2fquestions%2f7182675%2fredirecting-in-a-class-that-implements-the-actionfilterattribute 

리디렉션을 위해 일 것 같은로 이동합니다; 로그인을 마치면 returnurl 매개 변수를 확인하고 다시 시도하십시오. 당신은/등 소유 현재 사이트 또는 다른 사이트에

당신은, 그러나, 대상 URL 중 하나 상대 (동일한 사이트) 인 것을 확인해야합니다, 또는 절대 (see OWASP for details - 특히 "예제 시나리오") .

관련 문제