2017-12-20 15 views
1

사용자가 컨트롤러 작업을 호출하도록 허용하기 전에 현재 사용자에게 특정 권한이 있는지 확인하는 사용자 지정 권한 헤더가 있습니다.부분보기 및 뷰에 대한 권한 리디렉션

[HasPermission(Permission.ViewPage] 
public ActionResult Index() 
{ 
    return View(); 
} 

HasPermission 클래스는 AuthorizeAttribute에서 상속이 같은 OnAuthorization를 오버라이드 (override) :

public override void OnAuthorization(AuthorizationContext context) 
    { 
     if (!Permissions.IsUserInPermission(Permission)) 
     { 
      context.Result = new ViewResult{ ViewName = "Forbidden" }; 
     } 
    } 

이 부분보기 제외하고는 거의 모든, 와 함께 잘 작동합니다.

부분을 반환하는 작업에 권한 부여 특성을 넣으면 금지 된보기가 예상대로 반환되지만 전체 레이아웃을가집니다. 전체 레이아웃에는 메뉴와 같은 페이지의 다른 모든 요소가 있으므로 iframe이 다른 버전의 사이트에있는 것처럼 보입니다.

부분을 반환하는 컨트롤러 작업에서 권한 부여가 실패 할 때 부분보기를 반환하는 방법이 있습니까?

아니면 그냥 잘못하고있는 것입니까?

+1

당신이 context.Controller을 확인 해봤 다음 필터 OnAuthorization 방법에 context.Controller.ControllerContext.IsChildAction 속성을 확인할 수 있습니다 [ChildActionOnly]로 PartialViewResult 반환되는 작업. ControllerContext.IsChildAction을 true로 설정하면 PartialViewResult를 반환합니다. – Fran

+0

@Fran 아니요. 그게 정확히 내가 필요로하는 것 같은데. 컨트롤러는 아동 행동이 무엇인지를 어떻게 결정합니까? – joelforsyth

+1

작업 요구 사항에 [ChildActionOnly] 속성이 주석으로 지정되어 있어야합니다. – Fran

답변

1

마크

 if (context.Controller.ControllerContext.IsChildAction) 
     { 
      context.Result = new PartialViewResult(); 
     } 
     else 
     { 
      context.Result = new ViewResult(); 
     }