2012-05-03 49 views
1

我正在使用Windows身份驗證和自定義角色提供程序構建內部(Intranet)MVC3應用程序。認證和角色提供者工作正常,只要用戶具有所請求的角色即可。如何處理MVC3中的授權失敗

例如,我有一個UserContoller它允許應用程序的用戶管理應用程序內的用戶帳戶。顯然我想限制對這個控制器的訪問。

如果我這樣做:。

[Authorize] 
public class UserController : Controller 
{ 
    ... 
} 

那麼Windows身份驗證工作正常,並且用戶在登錄透明。然而,我想限制控制器特定用戶羣。所以我這樣做:

[Authorize(Roles="UserAdmin")] 
public class UserController : Controller 
{ 
    ... 
} 

如果我的角色提供返回角色列表包括「UserAdmin」,那麼一切都很好,用戶獲得訪問控制器。

但是,如果用戶不在角色中,那麼瀏覽器(在IE8和FF10上測試)會提示輸入憑據。如果這被取消,那麼服務器返回一個401錯誤頁面。

所以我的問題是,我該如何處理用戶不在請求的角色,並將他返回到應用程序的主動作或其他操作以提供用戶友好的消息的情況?

回答

4

您還可以創建從AuthorizeAttribute

覆蓋的HandleUnauthorizedRequest方法繼承的自定義屬性

0

您可以在web.config中指定要在401個案例中顯示的網址。

<customErrors mode="RemoteOnly" defaultRedirect="/Error/"> 
    <error statusCode="401" redirect="/AuthorizationFailed"/> 
</customErrors>