ASP.NET - 如果角色授权失败,则重定向到错误页面如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (146)

我使用MVC 3与表单身份验证。在我的控制器或方法上,我执行以下操作:

[Authorize (Roles = "developer")]

在这种情况下,我想检查用户是否已登录,如果没有,请将它们返回到登录页面。但是,如果该用户的'IsInRole'检查返回false,我希望他们转到不同的视图,如'未经授权'。

完成这样的事情的最好方法是什么?我希望避免创建一个新的Authorization属性,所以我不必在整个应用程序中重构每个Authorize属性,但是如果这是必需的,我会走这条路。

提问于
用户回答回答于

重写HandleUnauthorizedRequest方法的自定义授权属性可以完成这项工作:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            // The user is not authenticated
            base.HandleUnauthorizedRequest(filterContext);
        }
        else if (!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))
        {
            // The user is not in any of the listed roles => 
            // show the unauthorized view
            filterContext.Result = new ViewResult
            {
                ViewName = "~/Views/Shared/Unauthorized.cshtml"
            };
        }
        else
        { 
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

然后:

[MyAuthorize(Roles = "developer")]
public ActionResult Develop()
{
    ...
}
用户回答回答于

也可以通过自定义错误页面为401状态代码执行此操作。

扫码关注云+社区

领取腾讯云代金券