2

Ninject의 BindFilter<> 구문을 사용하여 적용하려고하는 필터가 두 개 있으며 종속성 삽입을 성공적으로 적용하고 있습니다. 문제는 현재 사용자가 누구인지 분류하고 InRequestScope을 바인드하고 유지 관리 권한을 확인할 때 두 번째 전에 실행해야한다는 것입니다. 그렇지 않으면 어떤 사용자를 참조하는지 알지 못합니다.Ninject Authorization vs Action 필터 바인딩 순서

NinjectWebCommon.cs 바인딩 필터는 다음과 같습니다

그래서 유지 관리 컨트롤러에, 내가 실행하는 첫 번째 다음 두 번째를 꿔
kernel.BindFilter<CurrentUserFilter>(FilterScope.Global, 0).InRequestScope(); 
kernel.BindFilter<SetupRightsAttribute>(FilterScope.Controller, 1).WhenControllerType<MaintenanceController>().InRequestScope(); 

; 다른 모든 것은 단지 첫 번째 것입니다.이 방법은 두 번째 방법은 내 유지 관리 컨트롤러에서 무언가를 탐색 할 때만 사용됩니다. 와 -

2 개 개의 필터

은 같은 (제외 관련성이없는 세부 사항)

public class CurrentUserFilter : IActionFilter 
{ 
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    // implementation - breakpoint 1 
} 

public class SetupRightsAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    // implementation - breakpoint 2 
} 
내가 기대하고있어

중단 한 히트 후 2 브레이크 포인트하지만 어떤 이유로 처음 항상 중단 2의 수에 관한 선언 이 시점에서 사용자를 알지 못하기 때문에 권한이 없다고 알려줍니다.

FilterScope 및 순서 설정의 많은 다른 순열을 시도했지만 다른 순서로 묶어도 작동하지만 아무 것도 작동하지 않습니다 ... 무엇을 잘못하고 있습니까?

답변

3

인증 필터는 동작 필터링보다 먼저 실행됩니다. 권한 부여는 동작 처리보다 MVC 실행 파이프 라인에서 빠르기 때문입니다.

+0

감사합니다. Remo, 나는 그것을 action 필터로 바꿀 것입니다. – DavidJones