你的位置:首页 > 软件开发 > ASP.net > 爱上MVC~AuthorizeAttribute验证不通过如何停止当前上下文

爱上MVC~AuthorizeAttribute验证不通过如何停止当前上下文

发布时间:2016-09-24 18:00:04
回到目录我们知道mvc里有一些过滤器,AuthorizeAttribute用来做授权,一般在用户授权方面可以使用它,当使用没有登陆,我们直接跳到登陆页,这是没有问题的,可我要说的是,当用户对某个Action没有权限时,如何禁止对当前action的执行,这个听起来很不可思议,因为我 ...

回到目录

我们知道get='_blank'>mvc里有一些过滤器,AuthorizeAttribute用来做授权,一般在用户授权方面可以使用它,当使用没有登陆,我们直接跳到登陆页,这是没有问题的,可我要说的是,当用户对某个Action没有权限时,如何禁止对当前action的执行,这个听起来很不可思议,因为我们一般感觉,当AuthorizeAttribute验证不通过后,它的当前action也不会被执行,可事实并非如此!

看下面代码

    public override void OnAuthorization(AuthorizationContext filterContext)    {      #region 例外      bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) ||                   filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) ||                   filterContext.RequestContext.HttpContext.Request.Url.Host == "localhost";      if (skipAuthorization)        return;      #endregion      //当前为正常页面,不是分布视图      var isValid = false;      //当前用户的菜单和权限      var menuAuthority = Lind.DDD.Utils.SerializeMemoryHelper.DeserializeFromJson<List<Tuple<int, string, int>>>(CurrentUser.ExtInfo);      //当前控制器对应的权限值      var controllerName = filterContext.RouteData.Values["controller"].ToString();      var actionName = filterContext.RouteData.Values["action"].ToString();      //当前权限,先找完全匹配的,如果没有,再找controller匹配的      var current = menuAuthority.Find(i => !string.IsNullOrWhiteSpace(i.Item2)        && i.Item2.ToLower() == ("/" + controllerName + "/" + actionName).ToLower());      if (current != null)      {        if ((current.Item3 & (int)Authority) == (int)Authority)        {          isValid = true;        }      }      if (!isValid)      {        string returnUrl = filterContext.RequestContext.HttpContext.Request.UrlReferrer == null ? "/AdminCommon/LogOn" : filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath;        filterContext.RequestContext.HttpContext.Response.Write("<div style='text-align:center'><div style='MARGIN-RIGHT: auto;MARGIN-LEFT: auto;width:300px;min-height:150px;border: 2px dashed #aaa;color: red; font-size: 14px;padding: 5px;text-align: center;vertical-align:middle;'><h2>警告</h2><p>您没有被授权此操作,请<a href=" + returnUrl + ">单击返回</a></p><p style='color:#000'>时间:" + DateTime.Now + "</p></div></div>");        filterContext.RequestContext.HttpContext.Response.End();        filterContext.Result = new EmptyResult();//清空当前Action,不执行当前Action代码      }    }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:爱上MVC~AuthorizeAttribute验证不通过如何停止当前上下文

关键词:mvc

mvc
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。