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 == )
{
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

上一篇:CentOS 6.7安装配置Cacti监控系统


下一篇:Asp.Net MVC中Controller与View之间传递的Model