UserManage.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Ant.Service.Common;
  6. using Central.Control.Domain;
  7. using Ant.Service.Common.Enums;
  8. using MES.Production.Service.IService;
  9. using Ant.ORM;
  10. using Ant.Data;
  11. using MES.Production.Entity.Entity;
  12. using MES.Production.Entity;
  13. namespace MES.Production.Service.ServiceImp
  14. {
  15. /// <summary>
  16. /// Service层基本用户信息(登录)接口
  17. /// add 作者: 季健国 QQ:181589805 by 2016-05-22
  18. /// </summary>
  19. public class UserManage : RepositoryBase<SYS_USER>, IService.IUserManage
  20. {
  21. #region 引用容器
  22. /// <summary>
  23. /// 用户档案
  24. /// </summary>
  25. IUserInfoManage UserInfoManage { get; set; }
  26. /// <summary>
  27. /// 用户角色
  28. /// </summary>
  29. IUserRoleManage UserRoleManage { get; set; }
  30. /// <summary>
  31. /// 用户权限
  32. /// </summary>
  33. IUserPermissionManage UserPermissionManage { get; set; }
  34. /// <summary>
  35. /// 用户岗位
  36. /// </summary>
  37. IPostUserManage PostUserManage { get; set; }
  38. /// <summary>
  39. /// 用户部门
  40. /// </summary>
  41. IUserDepartmentManage UserDepartmentManage { get; set; }
  42. /// <summary>
  43. /// 权限
  44. /// </summary>
  45. IPermissionManage PermissionManage { get; set; }
  46. /// <summary>
  47. /// 部门
  48. /// </summary>
  49. IDepartmentManage DepartmentManage { get; set; }
  50. #endregion
  51. /// <summary>
  52. /// 登录验证
  53. /// add 作者: 季健国 QQ:181589805 by 2016-05-10
  54. /// </summary>
  55. /// <param name="username">用户名</param>
  56. /// <param name="password">加密密码(DES)</param>
  57. /// <returns></returns>
  58. public SYS_USER UserLogin(string username, string password)
  59. {
  60. return this.Get(p => p.ACCOUNT == username && p.PASSWORD == password);
  61. //SYS_USER mod = new SYS_USER();
  62. //using (AntORM orm = new AntORM())
  63. //{
  64. // orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
  65. // RequestModel request = new RequestModel
  66. // {
  67. // newSt = new SqlNote() { Author = "季健国", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "获取游客信息" }
  68. // };
  69. // var resluttourist = orm.Queryable<Ent_SYS_USER>().Where(p => p.PHONE == username && p.PASSWORD == password).FirstOrDefault(request);
  70. // if (resluttourist.IsSuccess)
  71. // {
  72. // Ant.Common.LoggerHelper.Monitor("获取用户登录:" + resluttourist.StrSql);
  73. // Ent_SYS_USER model = resluttourist.ResultModel;
  74. // }
  75. //}
  76. //return mod;
  77. }
  78. /// <summary>
  79. /// 是否超级管理员
  80. /// </summary>
  81. public bool IsAdmin(int userId)
  82. {
  83. //通过用户ID获取角色
  84. SYS_USER entity = this.Get(p => p.ID == userId);
  85. if (entity == null) return false;
  86. var roles = entity.SYS_USER_ROLE.Select(p => new SYS_ROLE
  87. {
  88. ID = p.SYS_ROLE.ID
  89. });
  90. return roles.ToList().Any(item => item.ID == ClsDic.DicRole["超级管理员"]);
  91. }
  92. /// <summary>
  93. /// 根据用户ID获取用户名
  94. /// </summary>
  95. /// <param name="Id">用户ID</param>
  96. /// <returns></returns>
  97. public string GetUserName(int Id)
  98. {
  99. var query = this.LoadAll(c => c.ID == Id);
  100. if (query == null || !query.Any())
  101. {
  102. return "";
  103. }
  104. return query.First().NAME;
  105. }
  106. /// <summary>
  107. /// 根据用户ID删除用户相关记录
  108. /// 删除原则:1、删除用户档案
  109. /// 2、删除用户角色关系
  110. /// 3、删除用户权限关系
  111. /// 4、删除用户岗位关系
  112. /// 5、删除用户部门关系
  113. /// 6、删除用户
  114. /// </summary>
  115. public bool Remove(int userId)
  116. {
  117. try
  118. {
  119. //档案
  120. if (this.UserInfoManage.IsExist(p => p.USERID == userId))
  121. {
  122. this.UserInfoManage.Delete(p => p.USERID == userId);
  123. }
  124. //用户角色
  125. if (this.UserRoleManage.IsExist(p => p.FK_USERID == userId))
  126. {
  127. this.UserRoleManage.Delete(p => p.FK_USERID == userId);
  128. }
  129. //用户权限
  130. if (this.UserPermissionManage.IsExist(p => p.FK_USERID == userId))
  131. {
  132. this.UserPermissionManage.Delete(p => p.FK_USERID == userId);
  133. }
  134. //用户岗位
  135. if (this.PostUserManage.IsExist(p => p.FK_USERID == userId))
  136. {
  137. this.PostUserManage.Delete(p => p.FK_USERID == userId);
  138. }
  139. //用户部门
  140. if (this.UserDepartmentManage.IsExist(p => p.USER_ID == userId))
  141. {
  142. this.UserDepartmentManage.Delete(p => p.USER_ID == userId);
  143. }
  144. //用户自身
  145. if (this.IsExist(p => p.ID == userId))
  146. {
  147. this.Delete(p => p.ID == userId);
  148. }
  149. return true;
  150. }
  151. catch (Exception e) { throw e.InnerException; }
  152. }
  153. /// <summary>
  154. /// 从Cookie中获取用户信息
  155. /// </summary>
  156. public Account GetAccountByCookie()
  157. {
  158. var cookie = CookieHelper.GetCookie("cookie_rememberme");
  159. if (cookie != null)
  160. {
  161. //验证json的有效性
  162. if (!string.IsNullOrEmpty(cookie.Value))
  163. {
  164. //解密
  165. var cookievalue = Ant.Service.Common.CryptHelper.DESCrypt.Decrypt(cookie.Value);
  166. //是否为json
  167. if (!JsonSplit.IsJson(cookievalue)) return null;
  168. try
  169. {
  170. var jsonFormat = JsonConverter.ConvertJson(cookievalue);
  171. if (jsonFormat != null)
  172. {
  173. var users = UserLogin(jsonFormat.username, jsonFormat.password);
  174. if (users != null)
  175. return GetAccountByUser(users);
  176. }
  177. }
  178. catch { return null; }
  179. }
  180. }
  181. return null;
  182. }
  183. /// <summary>
  184. /// 根据用户构造用户基本信息
  185. /// </summary>
  186. public Account GetAccountByUser(SYS_USER users)
  187. {
  188. if (users == null) return null;
  189. //用户授权--->注意用户的授权是包括角色权限与自身权限的
  190. var permission = GetPermissionByUser(users);
  191. //用户角色
  192. var role = users.SYS_USER_ROLE.Select(p => p.SYS_ROLE).ToList();
  193. //用户部门
  194. var dpt = users.SYS_USER_DEPARTMENT.Select(p => p.SYS_DISTRIBUTORS).ToList();
  195. //用户岗位
  196. var post = users.SYS_POST_USER.ToList();
  197. //用户主部门
  198. YM_School schoolMod = new YM_School();
  199. using (AntORM orm = new AntORM())
  200. {
  201. orm.db = Ant.Data.DataAccessFactory.CreateDataConnection("CyclingItem");
  202. RequestModel request = new RequestModel
  203. {
  204. newSt = new SqlNote() { Author = "季健国", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "查询菜单的单个实体方法" }
  205. };
  206. orm.db = DataAccessFactory.CreateDataConnection("CyclingItem");
  207. int num = (users.DPTID).ToInt32();
  208. var resultSchool = orm.Queryable<YM_School>().Where(p => p.ID == num).FirstOrDefault(request);
  209. if (resultSchool.IsSuccess)
  210. {
  211. schoolMod = resultSchool.ResultModel;
  212. }
  213. }
  214. //var dptInfo = this.DepartmentManage.Get(p => p.ID == users.DPTID);
  215. //用户模块
  216. var module = permission.Select(p => p.SYS_MODULE).ToList().Distinct(new ModuleDistinct()).ToList();
  217. Account account = new Account()
  218. {
  219. Id = users.ID,
  220. Name = users.NAME,
  221. LogName = users.ACCOUNT,
  222. PassWord = users.PASSWORD,
  223. IsAdmin = IsAdmin(users.ID),
  224. DptInfo = schoolMod,
  225. //Dpt = dpt,
  226. Face_Img = users.FACE_IMG,
  227. Permissions = permission,
  228. Roles = role,
  229. PostUser = post,
  230. USERTYPE = users.USERTYPE.ToInt32(),
  231. Modules = module
  232. };
  233. return account;
  234. }
  235. /// <summary>
  236. /// 根据用户信息获取用户所有的权限
  237. /// </summary>
  238. private List<SYS_PERMISSION> GetPermissionByUser(SYS_USER users)
  239. {
  240. //1、超级管理员拥有所有权限
  241. if (IsAdmin(users.ID))
  242. return PermissionManage.LoadListAll(null);
  243. //2、普通用户,合并当前用户权限与角色权限
  244. var perlist = new List<SYS_PERMISSION>();
  245. //2.1合并用户权限
  246. perlist.AddRange(users.SYS_USER_PERMISSION.Select(p => p.SYS_PERMISSION).ToList());
  247. //2.2合同角色权限
  248. ////todo:经典多对多的数据查询Linq方法
  249. perlist.AddRange(users.SYS_USER_ROLE.Select(p => p.SYS_ROLE.SYS_ROLE_PERMISSION.Select(c => c.SYS_PERMISSION)).SelectMany(c => c.Select(e => e)).Cast<SYS_PERMISSION>().ToList());
  250. //3、去重
  251. ////todo:通过重写IEqualityComparer<T>实现对象去重
  252. perlist = perlist.Distinct(new PermissionDistinct()).ToList();
  253. return perlist;
  254. }
  255. /// <summary>
  256. /// 根据用户ID获取部门名称
  257. /// </summary>
  258. public string GetUserDptName(int id)
  259. {
  260. if (id <= 0)
  261. return "";
  262. var dptid = this.Get(p => p.ID == id).DPTID;
  263. return this.DepartmentManage.Get(p => p.ID == dptid).NAME;
  264. }
  265. }
  266. /// <summary>
  267. /// 权限去重,非常重要
  268. /// add 作者: 季健国 QQ:181589805 by 2016-08-03
  269. /// </summary>
  270. public class PermissionDistinct : IEqualityComparer<SYS_PERMISSION>
  271. {
  272. public bool Equals(SYS_PERMISSION x, SYS_PERMISSION y)
  273. {
  274. return x.ID == y.ID;
  275. }
  276. public int GetHashCode(SYS_PERMISSION obj)
  277. {
  278. return obj.ToString().GetHashCode();
  279. }
  280. }
  281. }