zoukankan      html  css  js  c++  java
  • Asp.net Controller中View 和Action方法认证Authorize 及对AuthorizeAttribute扩展

    Asp.net Controller中View和Action方法认证Authorize

      在建立Web 站点安全性时

    1、登录后才可访问系统文件 ——限制 Forms认证

    <authentication mode="Forms">
    <forms timeout="800" loginUrl="/Login/Index" path="/" protection="All" name="FinancialServicep.Web" slidingExpiration="true" />
    </authentication>

    2、增加Controller 、Action级别角色、权限、用户认证,下面描述一下角色认证

        一、首先在登录时将 角色及相关信息存储如下代码,这里因为系统中需要客户信息较多 所以存储较多 ,仅关心roleCode及可。

      // 设置 FormsAuthentication认证
      FormsAuthentication.SetAuthCookie(loginM.LoginId + "#" + loginM.UserName + "#" + loginM.UserId + "#" + loginM.OrgId + "#" + loginM.OrgType + "#" + loginM.IsSensitive+"#"+ roleCode, false);

      二、增加AuthorizeAttribute扩展认证  过滤器。

      

      public class CheckAuthentication : AuthorizeAttribute
        {
            public string[] checkRoles;
            public override void OnAuthorization(AuthorizationContext httpContext)
            {
                // 获取请求该方法所需角色
                checkRoles = Roles.Split(',');
    
                string controllerName = httpContext.ActionDescriptor.ControllerDescriptor.ControllerName;
                string actionName = httpContext.ActionDescriptor.ActionName;
               
                
                base.OnAuthorization(httpContext);
            }
          
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
    
                if (httpContext == null)
                {
                    throw new ArgumentNullException("HttpContext");
                }
                if (!httpContext.User.Identity.IsAuthenticated)
                {
                    return false;
                }
                if (Roles == null)
                {
                    return true;
                }
                if (Roles.Length == 0)
                {
                    return true;
                }
                if (checkRoles.Any(httpContext.User.IsInRole))
                {
                    return true;
                }
                 
    
                foreach (var item in checkRoles)
                {
                    
                    if (WebContext.RoleCode == item)
                    {
                        return true;
                    }
                }
                return false;
            }
    
            /// <summary>
            /// 没有权限用户跳转到登录
            /// </summary>
            /// <param name="filterContext"></param>
            protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
            {
                base.HandleUnauthorizedRequest(filterContext);
                if (filterContext == null)
                {
                    throw new ArgumentNullException("filterContext");
                }
                else
                {
                    filterContext.HttpContext.Response.Redirect("/Login/Index");
                }
            }
    
    
        }
    }

      三、Controller 或Action 加角色限制调用过滤器及可。

            // GET: FinancingLoan
            [CheckAuthentication(Roles = "Manager,Inv")]
            public ActionResult Index()
            {
                ViewBag.MenuCode = "Menu0018";
                return View();
            }

    这样做提高了系统访问安全性,Forms认证 限制了未登录用户不可访问网站各功能页,结合CheckAuthentication 过滤器认证 限制了没角相关功能访问角色的用户不可访问。

    如有问题及时沟通讨论在评论区,也可加QQ:626382542

  • 相关阅读:
    复利计算-做汉堡,结对2.0-复利计算再升级
    java集合
    java 封装,继承,多态基础
    购物车
    ajax
    演示
    实验四
    实验三
    构建之法6-7章读后感
    作业调度模拟程序
  • 原文地址:https://www.cnblogs.com/liyanbofly/p/8491936.html
Copyright © 2011-2022 走看看