源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

ASP.NET.4.5.1+MVC5.0设置系统角色与权限(一)

  • 时间:2022-04-18 10:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:ASP.NET.4.5.1+MVC5.0设置系统角色与权限(一)
[b]数据结构[/b] [img]http://files.jb51.net/file_images/article/201501/2015012710053717.png[/img] [b]权限分配[/b] [img]http://files.jb51.net/file_images/article/201501/2015012710053718.png[/img] [b]1.在项目中新建文件夹Helpers[/b] [b]2.在HR.Helpers文件夹下添加EnumMoudle.Cs[/b]
[url=]             return this.Content(content.ToString());         }         /// <summary>         /// 转向到一个提示页面,然后自动返回指定的页面         /// </summary>         /// <param name="notice"></param>         /// <param name="redirect"></param>         /// <returns></returns>         public ContentResult Stop(string notice, string redirect, bool isAlert = false)         {             var content = "<meta http-equiv='refresh' content='1;url=" + redirect + "' /><body style='margin-top:0px;color:red;font-size:24px;'>" + notice + "</body>";             if (isAlert)                 content = string.Format("<script>alert('{0}'); window.location.href='{1}'</script>", notice, redirect);             return this.Content(content);         }         /// <summary>         /// 在方法执行前更新操作人         /// </summary>         /// <param name="filterContext"></param>         public virtual void UpdateOperater(ActionExecutingContext filterContext)         {             if (this.Operater == null)                 return;             WCFContext.Current.Operater = this.Operater;         }         public virtual void ClearOperater()         {             //TODO         }         /// <summary>         /// AOP拦截,在Action执行后         /// </summary>         /// <param name="filterContext">filter context</param>         protected override void OnActionExecuted(ActionExecutedContext filterContext)         {             base.OnActionExecuted(filterContext);             if (!filterContext.RequestContext.HttpContext.Request.IsAjaxRequest() && !filterContext.IsChildAction)                 RenderViewData();             this.ClearOperater();         }         protected override void OnActionExecuting(ActionExecutingContext filterContext)         {             this.UpdateOperater(filterContext);             base.OnActionExecuting(filterContext);             //在方法执行前,附加上PageSize值             filterContext.ActionParameters.Values.Where(v => v is Request).ToList().ForEach(v => ((Request)v).PageSize = this.PageSize);         }         /// <summary>         /// 产生一些视图数据         /// </summary>         protected virtual void RenderViewData()         {         }         /// <summary>         /// 当前Http上下文信息,用于写Log或其他作用         /// </summary>         public WebExceptionContext WebExceptionContext         {             get             {                 var exceptionContext = new WebExceptionContext                 {                     IP = Fetch.UserIp,                     CurrentUrl = Fetch.CurrentUrl,                     RefUrl = (Request == null || Request.UrlReferrer == null) ? string.Empty : Request.UrlReferrer.AbsoluteUri,                     IsAjaxRequest = (Request == null) ? false : Request.IsAjaxRequest(),                     FormData = (Request == null) ? null : Request.Form,                     QueryData = (Request == null) ? null : Request.QueryString,                     RouteData = (Request == null || Request.RequestContext == null || Request.RequestContext.RouteData == null) ? null : Request.RequestContext.RouteData.Values                 };                 return exceptionContext;             }         }         /// <summary>         /// 发生异常写Log         /// </summary>         /// <param name="filterContext"></param>         protected override void OnException(ExceptionContext filterContext)         {             base.OnException(filterContext);             var e = filterContext.Exception;             LogException(e, this.WebExceptionContext);         }         protected virtual void LogException(Exception exception, WebExceptionContext exceptionContext = null)         {             //do nothing!         }     }     public class WebExceptionContext     {         public string IP { get; set; }         public string CurrentUrl { get; set; }         public string RefUrl { get; set; }         public bool IsAjaxRequest { get; set; }         public NameValueCollection FormData { get; set; }         public NameValueCollection QueryData { get; set; }         public RouteValueDictionary RouteData { get; set; }     } }
[b]4.在项目文件夹中新建ControllerBase.cs[/b] [b]5.在项目中新建RoleControllerBase.cs[/b]
[u]复制代码[/u] 代码如下:
namespace HR {     public class RoleControllerBase : ControllerBase     {         SystemUserRepository sysuserrepository = new SystemUserRepository();         /// <summary>         /// 用户权限         /// </summary>         public virtual List<EnumMoudle> PermissionList         {             get             {                 var permissionList = new List<EnumMoudle>();                 return permissionList;             }         }         public string BusinessPermissionString { get; set; }         [NotMapped]         public List<EnumMoudle> BusinessPermissionList         {             get             {                 if (string.IsNullOrEmpty(BusinessPermissionString))                     return new List<EnumMoudle>();                 else                     return BusinessPermissionString.Split(",".ToCharArray()).Select(p => int.Parse(p)).Cast<EnumMoudle>().ToList();             }             set             {                 BusinessPermissionString = string.Join(",", value.Select(p => (int)p));             }         }         /// <summary>         /// Action方法执行前没有权限提示信息         /// </summary>         /// <param name="filterContext"></param>         protected override void OnActionExecuting(ActionExecutingContext filterContext)         {             var noAuthorizeAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeIgnoreAttribute), false);             if (noAuthorizeAttributes.Length > 0)                 return;             base.OnActionExecuting(filterContext);             bool hasPermission = true;             var permissionAttributes = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(PermissionAttribute), false).Cast<PermissionAttribute>();             permissionAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(PermissionAttribute), false).Cast<PermissionAttribute>().Union(permissionAttributes);             var attributes = permissionAttributes as IList<PermissionAttribute> ?? permissionAttributes.ToList();             if (permissionAttributes != null && attributes.Count() > 0)             {                  string cookie = CookieHelper.GetValue("SystemUserID");                  if (string.IsNullOrEmpty(cookie))                  {                      filterContext.Result = Content("您没有登录!");                  }                  else                  {                      int mid = int.Parse(CookieHelper.GetValue("SystemUserID"));                      var model = sysuserrepository.GetModel(mid);                      BusinessPermissionString = model.BusinessPermissionString;                      hasPermission = true;                      foreach (var attr in attributes)                      {                          foreach (var permission in attr.Permissions)                          {                              if (!BusinessPermissionList.Contains(permission))                              {                                  hasPermission = false;                                  break;                              }                          }                      }                      if (!hasPermission)                      {                          if (Request.UrlReferrer != null)                              filterContext.Result = this.Stop("您没有权限!", "/default/ng");                          else                              filterContext.Result = Content("您没有权限!");                      }                  }             }         }     } }
[b]6.在每个Controller继承RoleControllerBase类[/b] public class EmployeesController : RoleControllerBase [b]7.在HR.Helpers文件夹下添加PermissionAttribute.Cs ,并继承 FilterAttribute, IActionFilter[/b]
[u]复制代码[/u] 代码如下:
namespace HR.Helpers {     public class PermissionAttribute : FilterAttribute, IActionFilter     {         public List<EnumMoudle> Permissions { get; set; }         public PermissionAttribute(params EnumMoudle[] parameters)         {             Permissions = parameters.ToList();         }         public void OnActionExecuted(ActionExecutedContext filterContext)         {             //throw new NotImplementedException();         }         public void OnActionExecuting(ActionExecutingContext filterContext)         {             //throw new NotImplementedException();         }     } }
[b]8.然后在Controller或者Action方法加上验证[/b]
[u]复制代码[/u] 代码如下:
 [Permission(EnumMoudle.Employees),Authorize, ValidateInput(false)]  [Permission(EnumMoudle.SysUserManage_Role)]
[b]9.在用户管理Controller中添加权限分配,修改方法[/b]
[u]复制代码[/u] 代码如下:
        #region 添加管理员         /// <summary>         /// 添加页         /// </summary>         /// <param name="model">管理员实体类</param>         /// <returns></returns>         [Authorize]         public ActionResult Add()         {             var moudleList = EnumHelper.GetItemValueList<EnumMoudle>();             this.ViewBag.MoudleList = new SelectList(mouldeList, "Key", "Value");             return View();         }         /// <summary>         /// 添加事件         /// </summary>         /// <param name="model">实体类</param>         /// <param name="fc"></param>         /// <returns></returns>         [Authorize, HttpPost, ValidateInput(false)]         public ActionResult Add(SystemUser model, FormCollection fc)         {             model.BusinessPermissionString = fc["MoudelList"];             model.State = 1;             model.CreateTime = DateTime.Now;             systemuserrepository.SaveOrEditModel(model);             return RedirectToAction("UserList");         }         #endregion         //修改权限         [Authorize, AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]         public ActionResult Edit(int id, FormCollection fc)         {             var model = systemuserrepository.GetModel(id);             if (model != null)             {                 string password = model.PassWord;                 if (Request.Form["PassWord"] != "")                 {                     model.BusinessPermissionString = fc["MoudleList"];                     UpdateModel(model);                     systemuserrepository.SaveOrEditModel(model);                 }                 else                 {                     model.BusinessPermissionString = fc["MoudleList"];                     UpdateModel(model);                     model.PassWord = password;                     systemuserrepository.SaveOrEditModel(model);                 }                 return RedirectToAction("userlist");             }             else                 return View("404");         }         #endregion
[u]复制代码[/u] 代码如下:
        [Authorize]         public ActionResult Edit(int id)         {             var model = systemuserrepository.GetModel(id);             if (model != null)             {                 var moudleList = EnumHelper.GetItemValueList<EnumBusinessPermission>();                 this.ViewBag.MoudleList = new SelectList(moudleList, "Key", "Value", string.Join(",", model.BusinessPermissionString.ToString()));                 return View(model);             }             else                 return View("404");         }
以上就是本文的全部内容了,后续我们将持续更新,小伙伴们是否喜欢本系列文章呢?
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部