如何处理MVC3中的授权失败

时间:2012-05-03 04:18:12

标签: asp.net-mvc-3 windows-authentication roleprovider

我正在使用Windows身份验证和自定义角色提供程序构建内部(Intranet)MVC3应用程序。只要用户具有请求的角色,身份验证和角色提供程序就可以正常工作。

例如,我有一个UserContoller,它允许应用程序的用户管理应用程序中的用户帐户。显然我想限制对这个控制器的访问。

如果我这样做:

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

然后Windows身份验证工作正常,用户透明地登录。但是,我想将控制器限制为特定的用户组。所以我这样做:

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

如果我的角色提供程序返回的角色列表包含“UserAdmin”,则一切正常,用户可以访问控制器。

但是,如果用户不在角色中,则浏览器(在IE8和FF10上测试)会提示输入凭据。如果取消,则服务器返回401错误页面。

所以我的问题是,我如何处理用户不在请求的角色中的情况,并将他返回到应用程序的主页操作,或者其他一些操作以提供用户友好的消息?< / p>

2 个答案:

答案 0 :(得分:4)

您还可以创建一个继承自AuthorizeAttribute

的自定义属性

覆盖HandleUnauthorizedRequest方法

答案 1 :(得分:0)

您可以在web.config中指定要在401案例中显示的网址。

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