我正在使用Windows身份验证和自定义角色提供程序构建内部(Intranet)MVC3应用程序。只要用户具有请求的角色,身份验证和角色提供程序就可以正常工作。
例如,我有一个UserContoller
,它允许应用程序的用户管理应用程序中的用户帐户。显然我想限制对这个控制器的访问。
如果我这样做:
[Authorize]
public class UserController : Controller
{
...
}
然后Windows身份验证工作正常,用户透明地登录。但是,我想将控制器限制为特定的用户组。所以我这样做:
[Authorize(Roles="UserAdmin")]
public class UserController : Controller
{
...
}
如果我的角色提供程序返回的角色列表包含“UserAdmin”,则一切正常,用户可以访问控制器。
但是,如果用户不在角色中,则浏览器(在IE8和FF10上测试)会提示输入凭据。如果取消,则服务器返回401错误页面。
所以我的问题是,我如何处理用户不在请求的角色中的情况,并将他返回到应用程序的主页操作,或者其他一些操作以提供用户友好的消息?< / p>
答案 0 :(得分:4)
您还可以创建一个继承自AuthorizeAttribute
覆盖HandleUnauthorizedRequest
方法
答案 1 :(得分:0)
您可以在web.config中指定要在401案例中显示的网址。
<customErrors mode="RemoteOnly" defaultRedirect="/Error/">
<error statusCode="401" redirect="/AuthorizationFailed"/>
</customErrors>