123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- 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
- {
- /// <summary>
- /// Service层基本用户信息(登录)接口
- /// add 作者: 季健国 QQ:181589805 by 2016-05-22
- /// </summary>
- public class UserManage : RepositoryBase<SYS_USER>, IService.IUserManage
- {
- #region 引用容器
- /// <summary>
- /// 用户档案
- /// </summary>
- IUserInfoManage UserInfoManage { get; set; }
- /// <summary>
- /// 用户角色
- /// </summary>
- IUserRoleManage UserRoleManage { get; set; }
- /// <summary>
- /// 用户权限
- /// </summary>
- IUserPermissionManage UserPermissionManage { get; set; }
- /// <summary>
- /// 用户岗位
- /// </summary>
- IPostUserManage PostUserManage { get; set; }
- /// <summary>
- /// 用户部门
- /// </summary>
- IUserDepartmentManage UserDepartmentManage { get; set; }
- /// <summary>
- /// 权限
- /// </summary>
- IPermissionManage PermissionManage { get; set; }
- /// <summary>
- /// 部门
- /// </summary>
- IDepartmentManage DepartmentManage { get; set; }
- #endregion
- /// <summary>
- /// 登录验证
- /// add 作者: 季健国 QQ:181589805 by 2016-05-10
- /// </summary>
- /// <param name="username">用户名</param>
- /// <param name="password">加密密码(DES)</param>
- /// <returns></returns>
- 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<Ent_SYS_USER>().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;
- }
- /// <summary>
- /// 是否超级管理员
- /// </summary>
- 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["超级管理员"]);
- }
- /// <summary>
- /// 根据用户ID获取用户名
- /// </summary>
- /// <param name="Id">用户ID</param>
- /// <returns></returns>
- public string GetUserName(int Id)
- {
- var query = this.LoadAll(c => c.ID == Id);
- if (query == null || !query.Any())
- {
- return "";
- }
- return query.First().NAME;
- }
- /// <summary>
- /// 根据用户ID删除用户相关记录
- /// 删除原则:1、删除用户档案
- /// 2、删除用户角色关系
- /// 3、删除用户权限关系
- /// 4、删除用户岗位关系
- /// 5、删除用户部门关系
- /// 6、删除用户
- /// </summary>
- 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; }
- }
- /// <summary>
- /// 从Cookie中获取用户信息
- /// </summary>
- 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;
- }
- /// <summary>
- /// 根据用户构造用户基本信息
- /// </summary>
- 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<YM_School>().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;
- }
- /// <summary>
- /// 根据用户信息获取用户所有的权限
- /// </summary>
- private List<SYS_PERMISSION> GetPermissionByUser(SYS_USER users)
- {
- //1、超级管理员拥有所有权限
- if (IsAdmin(users.ID))
- return PermissionManage.LoadListAll(null);
- //2、普通用户,合并当前用户权限与角色权限
- var perlist = new List<SYS_PERMISSION>();
- //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<SYS_PERMISSION>().ToList());
- //3、去重
- ////todo:通过重写IEqualityComparer<T>实现对象去重
- perlist = perlist.Distinct(new PermissionDistinct()).ToList();
- return perlist;
- }
- /// <summary>
- /// 根据用户ID获取部门名称
- /// </summary>
- 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;
- }
- }
- /// <summary>
- /// 权限去重,非常重要
- /// add 作者: 季健国 QQ:181589805 by 2016-08-03
- /// </summary>
- public class PermissionDistinct : IEqualityComparer<SYS_PERMISSION>
- {
- public bool Equals(SYS_PERMISSION x, SYS_PERMISSION y)
- {
- return x.ID == y.ID;
- }
- public int GetHashCode(SYS_PERMISSION obj)
- {
- return obj.ToString().GetHashCode();
- }
- }
- }
|