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

 

posted @ 2018-03-02 10:36  xiaoBai1001  阅读(614)  评论(0编辑  收藏  举报