using System; using System.Collections.Generic; using System.Linq; using System.Text; using Ant.Service.Common; using Central.Control.Domain; using Ant.Service.Common.Enums; using MES.Production.Service.IService; using Ant.ORM; using Ant.Data; using MES.Production.Entity.Entity; using MES.Production.Entity; namespace MES.Production.Service.ServiceImp { /// /// Service层基本用户信息(登录)接口 /// add 作者: 季健国 QQ:181589805 by 2016-05-22 /// public class UserManage : RepositoryBase, IService.IUserManage { #region 引用容器 /// /// 用户档案 /// IUserInfoManage UserInfoManage { get; set; } /// /// 用户角色 /// IUserRoleManage UserRoleManage { get; set; } /// /// 用户权限 /// IUserPermissionManage UserPermissionManage { get; set; } /// /// 用户岗位 /// IPostUserManage PostUserManage { get; set; } /// /// 用户部门 /// IUserDepartmentManage UserDepartmentManage { get; set; } /// /// 权限 /// IPermissionManage PermissionManage { get; set; } /// /// 部门 /// IDepartmentManage DepartmentManage { get; set; } #endregion /// /// 登录验证 /// add 作者: 季健国 QQ:181589805 by 2016-05-10 /// /// 用户名 /// 加密密码(DES) /// public SYS_USER UserLogin(string username, string password) { return this.Get(p => p.ACCOUNT == username && p.PASSWORD == password); //SYS_USER mod = new SYS_USER(); //using (AntORM orm = new AntORM()) //{ // orm.db = DataAccessFactory.CreateDataConnection("CyclingItem"); // RequestModel request = new RequestModel // { // newSt = new SqlNote() { Author = "季健国", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "获取游客信息" } // }; // var resluttourist = orm.Queryable().Where(p => p.PHONE == username && p.PASSWORD == password).FirstOrDefault(request); // if (resluttourist.IsSuccess) // { // Ant.Common.LoggerHelper.Monitor("获取用户登录:" + resluttourist.StrSql); // Ent_SYS_USER model = resluttourist.ResultModel; // } //} //return mod; } /// /// 是否超级管理员 /// public bool IsAdmin(int userId) { //通过用户ID获取角色 SYS_USER entity = this.Get(p => p.ID == userId); if (entity == null) return false; var roles = entity.SYS_USER_ROLE.Select(p => new SYS_ROLE { ID = p.SYS_ROLE.ID }); return roles.ToList().Any(item => item.ID == ClsDic.DicRole["超级管理员"]); } /// /// 根据用户ID获取用户名 /// /// 用户ID /// public string GetUserName(int Id) { var query = this.LoadAll(c => c.ID == Id); if (query == null || !query.Any()) { return ""; } return query.First().NAME; } /// /// 根据用户ID删除用户相关记录 /// 删除原则:1、删除用户档案 /// 2、删除用户角色关系 /// 3、删除用户权限关系 /// 4、删除用户岗位关系 /// 5、删除用户部门关系 /// 6、删除用户 /// public bool Remove(int userId) { try { //档案 if (this.UserInfoManage.IsExist(p => p.USERID == userId)) { this.UserInfoManage.Delete(p => p.USERID == userId); } //用户角色 if (this.UserRoleManage.IsExist(p => p.FK_USERID == userId)) { this.UserRoleManage.Delete(p => p.FK_USERID == userId); } //用户权限 if (this.UserPermissionManage.IsExist(p => p.FK_USERID == userId)) { this.UserPermissionManage.Delete(p => p.FK_USERID == userId); } //用户岗位 if (this.PostUserManage.IsExist(p => p.FK_USERID == userId)) { this.PostUserManage.Delete(p => p.FK_USERID == userId); } //用户部门 if (this.UserDepartmentManage.IsExist(p => p.USER_ID == userId)) { this.UserDepartmentManage.Delete(p => p.USER_ID == userId); } //用户自身 if (this.IsExist(p => p.ID == userId)) { this.Delete(p => p.ID == userId); } return true; } catch (Exception e) { throw e.InnerException; } } /// /// 从Cookie中获取用户信息 /// public Account GetAccountByCookie() { var cookie = CookieHelper.GetCookie("cookie_rememberme"); if (cookie != null) { //验证json的有效性 if (!string.IsNullOrEmpty(cookie.Value)) { //解密 var cookievalue = Ant.Service.Common.CryptHelper.DESCrypt.Decrypt(cookie.Value); //是否为json if (!JsonSplit.IsJson(cookievalue)) return null; try { var jsonFormat = JsonConverter.ConvertJson(cookievalue); if (jsonFormat != null) { var users = UserLogin(jsonFormat.username, jsonFormat.password); if (users != null) return GetAccountByUser(users); } } catch { return null; } } } return null; } /// /// 根据用户构造用户基本信息 /// public Account GetAccountByUser(SYS_USER users) { if (users == null) return null; //用户授权--->注意用户的授权是包括角色权限与自身权限的 var permission = GetPermissionByUser(users); //用户角色 var role = users.SYS_USER_ROLE.Select(p => p.SYS_ROLE).ToList(); //用户部门 var dpt = users.SYS_USER_DEPARTMENT.Select(p => p.SYS_DISTRIBUTORS).ToList(); //用户岗位 var post = users.SYS_POST_USER.ToList(); //用户主部门 YM_School schoolMod = new YM_School(); using (AntORM orm = new AntORM()) { orm.db = Ant.Data.DataAccessFactory.CreateDataConnection("CyclingItem"); RequestModel request = new RequestModel { newSt = new SqlNote() { Author = "季健国", NewSt = new System.Diagnostics.StackTrace(true), SqlDesc = "查询菜单的单个实体方法" } }; orm.db = DataAccessFactory.CreateDataConnection("CyclingItem"); int num = (users.DPTID).ToInt32(); var resultSchool = orm.Queryable().Where(p => p.ID == num).FirstOrDefault(request); if (resultSchool.IsSuccess) { schoolMod = resultSchool.ResultModel; } } //var dptInfo = this.DepartmentManage.Get(p => p.ID == users.DPTID); //用户模块 var module = permission.Select(p => p.SYS_MODULE).ToList().Distinct(new ModuleDistinct()).ToList(); Account account = new Account() { Id = users.ID, Name = users.NAME, LogName = users.ACCOUNT, PassWord = users.PASSWORD, IsAdmin = IsAdmin(users.ID), DptInfo = schoolMod, //Dpt = dpt, Face_Img = users.FACE_IMG, Permissions = permission, Roles = role, PostUser = post, USERTYPE = users.USERTYPE.ToInt32(), Modules = module }; return account; } /// /// 根据用户信息获取用户所有的权限 /// private List GetPermissionByUser(SYS_USER users) { //1、超级管理员拥有所有权限 if (IsAdmin(users.ID)) return PermissionManage.LoadListAll(null); //2、普通用户,合并当前用户权限与角色权限 var perlist = new List(); //2.1合并用户权限 perlist.AddRange(users.SYS_USER_PERMISSION.Select(p => p.SYS_PERMISSION).ToList()); //2.2合同角色权限 ////todo:经典多对多的数据查询Linq方法 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().ToList()); //3、去重 ////todo:通过重写IEqualityComparer实现对象去重 perlist = perlist.Distinct(new PermissionDistinct()).ToList(); return perlist; } /// /// 根据用户ID获取部门名称 /// public string GetUserDptName(int id) { if (id <= 0) return ""; var dptid = this.Get(p => p.ID == id).DPTID; return this.DepartmentManage.Get(p => p.ID == dptid).NAME; } } /// /// 权限去重,非常重要 /// add 作者: 季健国 QQ:181589805 by 2016-08-03 /// public class PermissionDistinct : IEqualityComparer { public bool Equals(SYS_PERMISSION x, SYS_PERMISSION y) { return x.ID == y.ID; } public int GetHashCode(SYS_PERMISSION obj) { return obj.ToString().GetHashCode(); } } }