2014-02-07 66 views
1

在我的MVC 5應用程序我已經申請了一些角色的過濾器,如:Asp.net MVC認證過濾器超越控制默認reditect

[Authorize(Roles = "ManageRoles")] 

現在,如果用戶沒有權限訪問這個角色,它重定向我登錄頁面。這在我的應用程序中是不正確的,因爲我想顯示一條錯誤消息,說您無權訪問。

如何更改如果用戶未被授權訪問過濾器會發生什麼情況?

我是否必須實現自定義過濾器?如果可能的話,我想嘗試使用redirectTo操作,以便在不同情況下可以有不同的錯誤頁面。

回答

0

在你Login視圖中,可以對添加的邏輯:

  1. 檢查,如果該請求未通過身份驗證
    1.1。顯示登錄表格
  2. 檢查用戶是否已通過認證但未處於所需角色
    2.1。顯示錯誤信息

由於您將通過Web.config設置自動重定向到登錄頁面,因此可以利用此機制。

if (!Request.IsAuthenticated) 
{ 
    //render login form 
} 
else 
{ 
    <p>Error: you do not have the necessary credentials to access this resource.</p> 
} 

另一種選擇是創建您自己的AuthorizationAttributeThis question與您的相似。你可能會覺得它很有用。

1

MVC5實際上已經開始解決這個問題。除授權過濾器外,他們現在還包含認證過濾器。這些都是相當簡單的文件,但我的直覺是,這是第一次將認證與授權分離(直到現在,ASP.NET已經混淆了兩者)

我在想什麼是認證過濾器將被使用來控制用戶是否登錄,並使用授權過濾器來控制您有權訪問的內容。但是,這似乎還沒有完全實現。