2016-10-13 1 views
2

아마도 이것은 오차드 질문보다 ASP.NET MVC 질문에 더 가깝습니다.하지만 저는 둘 다 상대적으로 새로운 것이기 때문에 어느 경우 에나 답을 모른다.각 요청마다 항상 실행하고 싶은 코드는 어디에 두어야합니까?

ASP.NET MVC 응용 프로그램은 기술적으로 단일 입력 지점을 갖고 있지 않으므로 레이어 또는 원본 또는 사용 권한에 상관없이 누군가가 어떤 페이지를 방문 할 때마다 항상 실행하고 싶은 코드를 어디에 배치해야합니까? ? 특정 오차드 (Orchard) 방식으로이 작업을 수행 할 수 있습니까?

차이가 있다면 현재 내가하고 싶은 것은 내 웹 사이트에 대한 액세스 권한이있는 IP 범위를 제한하는 것입니다. 모든 들어오는 요청을보고 사용자가 인증되었거나 사용자 지정 설정에서 구성한 허용 범위의 IP를 갖고 있는지 확인하고 싶습니다.

나는 수표를 Layout에 넣고 모든 영역을 감싸는 조건을 구현하거나 IThemeSelector을 구현하여 다른 테마로 전환하는 것과 같이 신속하고 더러운 방법을 생각해 볼 수 있습니다. 제대로 처리하고 싶습니다.

답변

4

모든 당신이 새로운 IActionFilter 또는 다음과 같은 IAuthorizationFilter 구현하고이를 달성하기 위해 무엇을해야하는지 :

public class CheckAccessFilter : FilterProvider, IActionFilter, IAuthorizationFilter { 
    public void OnActionExecuting(ActionExecutingContext filterContext) { 
     // here you can check the incoming request, and how the system will deal with it, 
     // before executing the action 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) { 

    } 

    public void OnAuthorization(AuthorizationContext filterContext) { 
     // here you can authorize any request 
    } 
} 

을하지만 당신은 원하는 경우 콘텐츠 항목에 따라 권한을 부여 (같은 위젯, 페이지, 계획) , 당신은 IAuthorizationServiceEventHandler 구현할 수 있습니다 :이 방법을 구현하기 위해 수행 할 수

public class IPAuthorizationEventHandler : IAuthorizationServiceEventHandler { 
    public void Checking(CheckAccessContext context) { 
    } 

    public void Adjust(CheckAccessContext context) { 
    } 

    public void Complete(CheckAccessContext context) { 
    } 
} 

가장 좋은 샘플이 SecurableContentItemsAuthorizationEventHandler, 당신은 Orchard.ContentPermissions 모듈에서 찾을 수 있습니다.

+0

이 코드를 어디에 넣어야할지 내 질문에 대한 답변입니다. 그러나 "HTTP 헤더가 이미 설정된 후 리디렉션 할 수 없기 때문에"내 검사가 실패하면 'OnResultExecuting' 메서드에서 리디렉션 할 수없는 문제가 있습니다. 이 문제를 해결할 방법이 있다면 어떨까요? – Lawyerson

+0

죄송합니다. 이것은 실수였습니다. 업데이트 된 답변을 참조하십시오. 'IResultFilter'대신 'IActionFilter'를 사용하여 작업 자체를 처리하기 전에 요청을 잡아야합니다. – mdameer

+0

건배, 내가 알고 싶었던 것 이상! – Lawyerson

관련 문제