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