2012-11-19 2 views
0

멤버십 사용자가 특정 폴더에 대한 액세스를 시도하고 이제는 역할별로 허용되면 시스템이/Account/Index로 리디렉션되고 로그인 및 암호를 다시 입력하십시오.역할별로 다른 폴더/다른 사용자/컨트롤러/작업으로 사용자 리디렉션

사용자가 이미 로그인되어 있고 다른/컨트롤러/동작으로 리디렉션하고 싶기 때문에이 동작을 변경하고 싶습니다.

여기에서 도움을 얻을 수 있습니까? 미리 감사드립니다.

답변

0

모든 웹 응용 프로그램에서 비슷한 작업을 수행합니다. 사용자가 인증되었지만 페이지를보기위한 보안 요구 사항을 충족시키지 못하면 HTTP 403 예외가 발생하고 403 예외에 대한 특정보기가 표시됩니다.

내 사용자 지정 권한 부여 속성에서 코드 조각입니다 :

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { 
    if (filterContext.HttpContext.Request.IsAuthenticated) { 
     //If the user is authenticated, but not authorized to view the requested page (i.e. not a member of the correct group), return an HTTP 403 exception. 
     throw new HttpException(403, string.Format("The user {0} was not authorized to view the following page: {1}", filterContext.HttpContext.User.Identity.Name, filterContext.HttpContext.Request.Url)); 
    } else { 
     base.HandleUnauthorizedRequest(filterContext); 
    } 
} 

그리고 여기에 내가 실제로보기 응답을 수행 내에서 Global.asax에서 조각입니다 (이것은 ErrorController이 존재하고 다음보기 Error403라고 가정 :

protected void Application_Error() { 
    var exception = Server.GetLastError(); 
    var httpException = exception as HttpException; 

    Response.Clear(); 
    Server.ClearError(); 

    var routeData = new RouteData(); 
    routeData.Values["controller"] = "Error"; 
    routeData.Values["action"] = "Error500"; 

    Response.StatusCode = 500; 
    Response.TrySkipIisCustomErrors = true; 

    if (httpException != null) { 
     Response.StatusCode = httpException.GetHttpCode(); 
     switch (Response.StatusCode) { 
      case 403: 
       routeData.Values["action"] = "Error403"; 
       break; 
      case 404: 
       routeData.Values["action"] = "Error404"; 
       routeData.Values["message"] = httpException.Message; 
       break; 
      case 500: 
       routeData.Values["action"] = "Error500"; 
       break; 
     } 
    } 

    IController errorsController = new ErrorController(); 
    var rc = new RequestContext(new HttpContextWrapper(Context), routeData); 
    errorsController.Execute(rc); 
} 
+0

감사합니다. 이것은 매우 도움이되었습니다. –

관련 문제