using Furion.DatabaseAccessor; using Furion.DependencyInjection; using Furion.FriendlyException; using Microsoft.AspNetCore.Http; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using Ewide.Core.Service; namespace Ewide.Core { /// /// 用户管理 /// public class UserManager : IUserManager, IScoped { private readonly IRepository _sysUserRep; // 用户表仓储 private readonly IRepository _sysRoleRep; private readonly IRepository _sysUserRoleRep; private readonly IRepository _sysEmpRep; // 员工表 private readonly IRepository _sysOrgRep; private readonly IRepository _sysRoleMenuRep; private readonly IRepository _sysMenuRep; private readonly IHttpContextAccessor _httpContextAccessor; private readonly ISysCacheService _sysCacheService; public string UserId { get => _httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.CLAINM_USERID)?.Value; } public string Account { get => _httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.CLAINM_ACCOUNT)?.Value; } public string Name { get => _httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.CLAINM_NAME)?.Value; } public bool SuperAdmin { get => _httpContextAccessor.HttpContext.User.FindFirst(ClaimConst.CLAINM_SUPERADMIN)?.Value == ((int)AdminType.SuperAdmin).ToString(); } public SysUser User { get => _sysUserRep.Find(UserId); } public UserManager( IRepository sysUserRep, IRepository sysRoleRep, IRepository sysUserRoleRep, IRepository sysEmpRep, IRepository sysOrgRep, IHttpContextAccessor httpContextAccessor, ISysCacheService sysCacheService, IRepository sysRoleMenuRep, IRepository sysMenuRep) { _sysUserRep = sysUserRep; _sysRoleRep = sysRoleRep; _sysUserRoleRep = sysUserRoleRep; _sysEmpRep = sysEmpRep; _sysOrgRep = sysOrgRep; _httpContextAccessor = httpContextAccessor; _sysCacheService = sysCacheService; _sysRoleMenuRep = sysRoleMenuRep; _sysMenuRep = sysMenuRep; } /// /// 获取用户信息 /// /// /// public async Task CheckUserAsync(string userId) { var user = await _sysUserRep.FirstOrDefaultAsync(u => u.Id == userId, false); return user ?? throw Oops.Oh(ErrorCode.D1002); } /// /// 获取用户信息 /// /// public async Task CheckUserAsync() { return await CheckUserAsync(UserId); } /// /// 获取用户员工信息 /// /// /// public async Task GetUserEmpInfo(string userId) { var emp = await _sysEmpRep.FirstOrDefaultAsync(u => u.Id == userId, false); return emp ?? throw Oops.Oh(ErrorCode.D1002); } /// /// 获取用户员工信息 /// /// public async Task GetUserEmpInfo() { return await GetUserEmpInfo(UserId); } /// /// 获取用户部门信息 /// /// /// public async Task GetUserOrgInfo(string userId) { var emp = await GetUserEmpInfo(userId); var org = await _sysOrgRep.FirstOrDefaultAsync(u => u.Id == emp.OrgId, false); return org ?? throw Oops.Oh(ErrorCode.D1002); } /// /// 获取用户部门信息 /// /// public async Task GetUserOrgInfo() { return await GetUserOrgInfo(UserId); } /// /// 获取用户角色Id列表 /// /// /// public async Task> GetUserRoleIdList(string userId) { var roleIds = await _sysUserRoleRep.DetachedEntities.Where(u => u.SysUserId == userId).Select(u => u.SysRoleId).ToListAsync(); return roleIds; } /// /// 获取用户角色Id列表 /// /// public async Task> GetUserRoleIdList() { return await GetUserRoleIdList(UserId); } /// /// 获取用户角色列表 /// /// /// public async Task> GetUserRoleList(string userId) { var roleIds = await GetUserRoleIdList(userId); var roles = await _sysRoleRep.DetachedEntities.Where(u => roleIds.Contains(u.Id)).ToListAsync(); return roles; } /// /// 获取用户角色列表 /// /// public async Task> GetUserRoleList() { return await GetUserRoleList(UserId); } public async Task> GetLoginPermissionList() { var permissions = await _sysCacheService.GetPermission(UserId); // 先从缓存里面读取 if (permissions == null || permissions.Count < 1) { var roleIdList = await GetUserRoleIdList(); var menuIdList = await _sysRoleMenuRep.DetachedEntities .Where(u => roleIdList.Contains(u.SysRoleId)) .Select(u => u.SysMenuId).ToListAsync(); permissions = await _sysMenuRep.DetachedEntities.Where(u => menuIdList.Contains(u.Id)) .Where(u => u.Type == (int)MenuType.FUNCTION) .Where(u => u.Status == (int)CommonStatus.ENABLE) .Select(u => u.Permission).ToListAsync(); #if DEBUG #else await _sysCacheService.SetPermission(userId, permissions); // 缓存结果 #endif } return permissions; } } }