首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET -如果角色授权失败,则重定向至错误页

ASP.NET -如果角色授权失败,则重定向至错误页
EN

Stack Overflow用户
提问于 2011-09-17 00:23:01
回答 3查看 19.4K关注 0票数 23

我使用的是带有表单身份验证的MVC3。在我的控制器或方法上,我正在执行以下操作:

代码语言:javascript
复制
[Authorize (Roles = "developer")]

在这种情况下,我想检查用户是否已登录,如果没有,则将其返回到登录页面。但是,如果该用户的'IsInRole‘检查返回false,我希望他们转到一个不同的视图,显示类似’未授权‘的内容。

完成这类任务的最佳方式是什么?我希望避免创建新的Authorization属性,这样我就不必重构整个应用程序中的每个Authorization属性,但如果这是必需的,我会走这条路。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-17 00:31:03

覆盖HandleUnauthorizedRequest方法的自定义authorize属性可以完成此任务:

代码语言:javascript
复制
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);
        }
    }
}

然后:

代码语言:javascript
复制
[MyAuthorize(Roles = "developer")]
public ActionResult Develop()
{
    ...
}
票数 49
EN

Stack Overflow用户

发布于 2011-09-17 07:23:31

您也可以使用401状态码的自定义错误页来执行此操作。

有关实现细节,请参阅this question

票数 1
EN

Stack Overflow用户

发布于 2018-01-15 03:07:45

你可以像this.Because一样使用它,如果你没有权限,它就是方法。授权控制不是必需的

代码语言:javascript
复制
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            // The user is not authenticated
            base.HandleUnauthorizedRequest(filterContext);
        }
        else
        {
            filterContext.Result = new ViewResult
            {
                ViewName = "~/Views/Shared/Unauthorized.cshtml",
            };
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7447705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档