1

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

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

如果我这样做:

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

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

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

如果我的角色提供者返回的角色列表包括“UserAdmin”,那么一切都很好,用户可以访问控制器。

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

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

4

2 回答 2

4

您还可以创建一个继承自的自定义属性AuthorizeAttribute

覆盖HandleUnauthorizedRequest方法

于 2012-05-03T08:59:46.063 回答
0

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

<customErrors mode="RemoteOnly" defaultRedirect="/Error/">
   <error statusCode="401" redirect="/AuthorizationFailed"/>
</customErrors>
于 2012-05-03T05:25:36.153 回答