加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 仅当不使用角色时,如何重定向[Authorize]到login

发布时间:2020-12-16 00:39:16 所属栏目:asp.Net 来源:网络整理
导读:我想[授权]重定向到loginUrl,除非我也使用角色,例如[Authorize(Roles =“Admin”)]。在这种情况下,我想简单地显示一个说明用户没有授权的页面。 我该怎么办? 解决方法 这是从我修改的AuthorizeAttribute实现的代码;我把它命名为SecurityAttribute。我唯
我想[授权]重定向到loginUrl,除非我也使用角色,例如[Authorize(Roles =“Admin”)]。在这种情况下,我想简单地显示一个说明用户没有授权的页面。

我该怎么办?

解决方法

这是从我修改的AuthorizeAttribute实现的代码;我把它命名为SecurityAttribute。我唯一改变的是OnAuthorization方法,我添加了一个额外的字符串属性为Url重定向到一个未经授权的页面:
// Set default Unauthorized Page Url here
private string _notifyUrl = "/Error/Unauthorized"; 

public string NotifyUrl { 
    get { return _notifyUrl; } set { _notifyUrl = value; } 
}

public override void OnAuthorization(AuthorizationContext filterContext) {
    if (filterContext == null) {
        throw new ArgumentNullException("filterContext");
    }

    if (AuthorizeCore(filterContext.HttpContext)) {
        HttpCachePolicyBase cachePolicy =
            filterContext.HttpContext.Response.Cache;
        cachePolicy.SetProxyMaxAge(new TimeSpan(0));
        cachePolicy.AddValidationCallback(CacheValidateHandler,null);
    }

    /// This code added to support custom Unauthorized pages.
    else if (filterContext.HttpContext.User.Identity.IsAuthenticated)
    {
        if (NotifyUrl != null)
            filterContext.Result = new RedirectResult(NotifyUrl);
        else
           // Redirect to Login page.
            HandleUnauthorizedRequest(filterContext);
    }
    /// End of additional code
    else
    {
         // Redirect to Login page.
        HandleUnauthorizedRequest(filterContext);
    }
}

您以与原始AuthorizeAttribute相同的方式调用它,除了有一个额外的属性可以覆盖未经授权的页面网址:

// Use custom Unauthorized page:
[Security (Roles="Admin,User",NotifyUrl="/UnauthorizedPage")]

// Use default Unauthorized page:
[Security (Roles="Admin,User")]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读