2

我有2個過濾器我試圖申請使用Ninject的BindFilter<>語法,並且它們正在成功應用於它們的依賴注入。問題出在這樣一個事實,即一個人將當前用戶分類並綁定那個人,並且在檢查維護授權時必須在第二個人之前運行 - 否則它不知道你指的是哪個用戶。Ninject授權與操作過濾器綁定順序

的濾波器,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 
} 

我期待斷點1被擊中,然後斷點2,但由於某種原因它總是斷點2首 - 和因爲它不知道用戶在這一點上它告訴我我沒有權限。

我已經嘗試過FilterScope和順序設置的許多不同排列,即使以不同的順序綁定它們,但沒有任何作用......我做錯了什麼?

回答

3

授權過濾器在操作過濾器之前執行,因爲授權在MVC執行管道中比處理操作早。

+0

謝謝雷莫,我會將它改爲動作過濾器,然後......或者沿着這些線的東西:-P – DavidJones