2015-07-13 75 views
0

我期待實現一個基於條件的站點範圍重定向到我的MVC5應用程序。ASP.NET MVC重定向所有請求,如果條件成熟

我已經研究了向我的基本控制器添加[Authorize],但這不夠好,因爲我的網站在Windows身份驗證上運行,但我需要驗證該用戶是否存在於不與廣告。

我研究過濾器並瞭解可能需要自定義操作過濾器。我是否試圖以正確的方式執行此操作,並且該項目在哪裏?

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    if(StaffId == 0) 
    { 
     filterContext.Result = RedirectToAction("Error"); 
    } 
} 

回答

2

創建自定義的授權屬性,如:

public class StaffOnlyAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return StaffId != 0; 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     base.HandleUnauthorizedRequest(filterContext); 
     filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "YourController", action = "Error" })); 
    } 
} 
+0

這聽起來很朦朧,但是解決方案中是否存在需要放置的特定位置?謝謝 – Gareth

+0

沒有這樣的要求。您可以選擇與您的項目結構相匹配的任何位置,但請注意此屬性應瞭解您的「StaffId」。 – serhiyb

+0

謝謝,有道理。我會去的! – Gareth

0

如果有用戶數目少,我會把這些ID存在於緩存的獨立,企業擁有層次中的所有(這將以特定的時間間隔從數據庫中自行刷新)以節省時間,因此您不會在每個請求上都訪問數據庫。

此替代方案是在登錄後存在一個cookie,該cookie永不過期,表示它們也屬於該獨立的業務所有層次結構。然後您可以讀取該cookie並執行重定向。可能需要對該cookie進行加密取決於你的需求。

+0

不幸的是,有30k +的用戶,每次調用任何操作時都需要執行檢查。 – Gareth

+0

好吧然後第二個選項是最明智的。 – TotalWar