数据结构
权限分配
1.在项目中新建文件夹Helpers
2.在HR.Helpers文件夹下添加EnumMoudle.Cs
namespace HR.Helpers { public enum EnumMoudle { /// <summary> /// 模块 /// </summary> [EnumTitle("用户管理")] SysUserManage_Role = 102,
[EnumTitle("机构管理")] Department = 201, [EnumTitle("人事资料")] Employees = 301, [EnumTitle("系统管理")] BaseInfo = 404, } }
3.在HR.Helpers文件夹下添加ControllerBase.Cs
1 namespace HR.Helpers 2 { 3 public class ControllerBase : Controller 4 { 5 /// <summary> 6 /// 操作人,传IP....到后端记录 7 /// </summary> 8 public virtual Operater Operater 9 { 10 get 11 { 12 return null; 13 } 14 } 15 16 /// <summary> 17 /// 分页大小 18 /// </summary> 19 public virtual int PageSize 20 { 21 get 22 { 23 return 15; 24 } 25 } 26 27 protected ContentResult JsonP(string callback, object data) 28 { 29 var json = Newtonsoft.Json.JsonConvert.SerializeObject(data); 30 return this.Content(string.Format("{0}({1})", callback, json)); 31 } 32 33 /// <summary> 34 /// 当弹出DIV弹窗时,需要刷新浏览器整个页面 35 /// </summary> 36 /// <returns></returns> 37 public ContentResult RefreshParent(string alert = null) 38 { 39 var script = string.Format("<script>{0}; parent.location.reload(1)</script>", string.IsNullOrEmpty(alert) ? string.Empty : "alert('" + alert + "')"); 40 return this.Content(script); 41 } 42 43 public new ContentResult RefreshParentTab(string alert = null) 44 { 45 var script = string.Format("<script>{0}; if (window.opener != null) {{ window.opener.location.reload(); window.opener = null;window.open('', '_self', ''); window.close()}} else {{parent.location.reload(1)}}</script>", string.IsNullOrEmpty(alert) ? string.Empty : "alert('" + alert + "')"); 46 return this.Content(script); 47 } 48 49 /// <summary> 50 /// 用JS关闭弹窗 51 /// </summary> 52 /// <returns></returns> 53 public ContentResult CloseThickbox() 54 { 55 return this.Content("<script>top.tb_remove()</script>"); 56 } 57 58 /// <summary> 59 /// 警告并且历史返回 60 /// </summary> 61 /// <param name="notice"></param> 62 /// <returns></returns> 63 public ContentResult Back(string notice) 64 { 65 var content = new StringBuilder("<script>"); 66 if (!string.IsNullOrEmpty(notice)) 67 content.AppendFormat("alert('{0}');", notice); 68 content.Append("history.go(-1)</script>"); 69 return this.Content(content.ToString()); 70 } 71 72 73 public ContentResult PageReturn(string msg, string url = null) 74 { 75 var content = new StringBuilder("<script type='text/javascript'>"); 76 if (!string.IsNullOrEmpty(msg)) 77 content.AppendFormat("alert('{0}');", msg); 78 if (string.IsNullOrWhiteSpace(url)) 79 url = Request.Url.ToString(); 80 content.Append("window.location.href='" + url + "'</script>"); 81 return this.Content(content.ToString()); 82 } 83 84 /// <summary> 85 /// 转向到一个提示页面,然后自动返回指定的页面 86 /// </summary> 87 /// <param name="notice"></param> 88 /// <param name="redirect"></param> 89 /// <returns></returns> 90 public ContentResult Stop(string notice, string redirect, bool isAlert = false) 91 { 92 var content = "<meta http-equiv='refresh' content='1;url=" + redirect + "' /><body style='margin-top:0px;color:red;font-size:24px;'>" + notice + "</body>"; 93 94 if (isAlert) 95 content = string.Format("<script>alert('{0}'); window.location.href='{1}'</script>", notice, redirect); 96 97 return this.Content(content); 98 } 99 100 /// <summary> 101 /// 在方法执行前更新操作人 102 /// </summary> 103 /// <param name="filterContext"></param> 104 public virtual void UpdateOperater(ActionExecutingContext filterContext) 105 { 106 if (this.Operater == null) 107 return; 108 109 WCFContext.Current.Operater = this.Operater; 110 } 111 112 public virtual void ClearOperater() 113 { 114 //TODO 115 } 116 117 /// <summary> 118 /// AOP拦截,在Action执行后 119 /// </summary> 120 /// <param name="filterContext">filter context</param> 121 protected override void OnActionExecuted(ActionExecutedContext filterContext) 122 { 123 base.OnActionExecuted(filterContext); 124 if (!filterContext.RequestContext.HttpContext.Request.IsAjaxRequest() && !filterContext.IsChildAction) 125 RenderViewData(); 126 127 this.ClearOperater(); 128 } 129 130 protected override void OnActionExecuting(ActionExecutingContext filterContext) 131 { 132 this.UpdateOperater(filterContext); 133 base.OnActionExecuting(filterContext); 134 135 //在方法执行前,附加上PageSize值 136 filterContext.ActionParameters.Values.Where(v => v is Request).ToList().ForEach(v => ((Request)v).PageSize = this.PageSize); 137 } 138 139 /// <summary> 140 /// 产生一些视图数据 141 /// </summary> 142 protected virtual void RenderViewData() 143 { 144 } 145 146 /// <summary> 147 /// 当前Http上下文信息,用于写Log或其他作用 148 /// </summary> 149 public WebExceptionContext WebExceptionContext 150 { 151 get 152 { 153 var exceptionContext = new WebExceptionContext 154 { 155 IP = Fetch.UserIp, 156 CurrentUrl = Fetch.CurrentUrl, 157 RefUrl = (Request == null || Request.UrlReferrer == null) ? string.Empty : Request.UrlReferrer.AbsoluteUri, 158 IsAjaxRequest = (Request == null) ? false : Request.IsAjaxRequest(), 159 FormData = (Request == null) ? null : Request.Form, 160 QueryData = (Request == null) ? null : Request.QueryString, 161 RouteData = (Request == null || Request.RequestContext == null || Request.RequestContext.RouteData == null) ? null : Request.RequestContext.RouteData.Values 162 }; 163 164 return exceptionContext; 165 } 166 } 167 168 /// <summary> 169 /// 发生异常写Log 170 /// </summary> 171 /// <param name="filterContext"></param> 172 protected override void OnException(ExceptionContext filterContext) 173 { 174 base.OnException(filterContext); 175 var e = filterContext.Exception; 176 177 LogException(e, this.WebExceptionContext); 178 } 179 180 protected virtual void LogException(Exception exception, WebExceptionContext exceptionContext = null) 181 { 182 //do nothing! 183 } 184 } 185 186 public class WebExceptionContext 187 { 188 public string IP { get; set; } 189 public string CurrentUrl { get; set; } 190 public string RefUrl { get; set; } 191 public bool IsAjaxRequest { get; set; } 192 public NameValueCollection FormData { get; set; } 193 public NameValueCollection QueryData { get; set; } 194 public RouteValueDictionary RouteData { get; set; } 195 } 196 }