195 lines
6.8 KiB
C#
195 lines
6.8 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 用户管理
|
|
/// </summary>
|
|
public class UserManager : IUserManager, IScoped
|
|
{
|
|
private readonly IRepository<SysUser> _sysUserRep; // 用户表仓储
|
|
private readonly IRepository<SysRole> _sysRoleRep;
|
|
private readonly IRepository<SysUserRole> _sysUserRoleRep;
|
|
private readonly IRepository<SysEmp> _sysEmpRep; // 员工表
|
|
private readonly IRepository<SysOrg> _sysOrgRep;
|
|
private readonly IRepository<SysRoleMenu> _sysRoleMenuRep;
|
|
private readonly IRepository<SysMenu> _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<SysUser> sysUserRep,
|
|
IRepository<SysRole> sysRoleRep,
|
|
IRepository<SysUserRole> sysUserRoleRep,
|
|
IRepository<SysEmp> sysEmpRep,
|
|
IRepository<SysOrg> sysOrgRep,
|
|
IHttpContextAccessor httpContextAccessor, ISysCacheService sysCacheService, IRepository<SysRoleMenu> sysRoleMenuRep, IRepository<SysMenu> sysMenuRep)
|
|
{
|
|
_sysUserRep = sysUserRep;
|
|
_sysRoleRep = sysRoleRep;
|
|
_sysUserRoleRep = sysUserRoleRep;
|
|
_sysEmpRep = sysEmpRep;
|
|
_sysOrgRep = sysOrgRep;
|
|
_httpContextAccessor = httpContextAccessor;
|
|
_sysCacheService = sysCacheService;
|
|
_sysRoleMenuRep = sysRoleMenuRep;
|
|
_sysMenuRep = sysMenuRep;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户信息
|
|
/// </summary>
|
|
/// <param name="userId"></param>
|
|
/// <returns></returns>
|
|
public async Task<SysUser> CheckUserAsync(string userId)
|
|
{
|
|
var user = await _sysUserRep.FirstOrDefaultAsync(u => u.Id == userId, false);
|
|
return user ?? throw Oops.Oh(ErrorCode.D1002);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<SysUser> CheckUserAsync()
|
|
{
|
|
return await CheckUserAsync(UserId);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户员工信息
|
|
/// </summary>
|
|
/// <param name="userId"></param>
|
|
/// <returns></returns>
|
|
public async Task<SysEmp> GetUserEmpInfo(string userId)
|
|
{
|
|
var emp = await _sysEmpRep.FirstOrDefaultAsync(u => u.Id == userId, false);
|
|
return emp ?? throw Oops.Oh(ErrorCode.D1002);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户员工信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<SysEmp> GetUserEmpInfo()
|
|
{
|
|
return await GetUserEmpInfo(UserId);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户部门信息
|
|
/// </summary>
|
|
/// <param name="userId"></param>
|
|
/// <returns></returns>
|
|
public async Task<SysOrg> 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户部门信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<SysOrg> GetUserOrgInfo()
|
|
{
|
|
return await GetUserOrgInfo(UserId);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户角色Id列表
|
|
/// </summary>
|
|
/// <param name="userId"></param>
|
|
/// <returns></returns>
|
|
public async Task<List<string>> GetUserRoleIdList(string userId)
|
|
{
|
|
var roleIds = await _sysUserRoleRep.DetachedEntities.Where(u => u.SysUserId == userId).Select(u => u.SysRoleId).ToListAsync();
|
|
return roleIds;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户角色Id列表
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<List<string>> GetUserRoleIdList()
|
|
{
|
|
return await GetUserRoleIdList(UserId);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户角色列表
|
|
/// </summary>
|
|
/// <param name="userId"></param>
|
|
/// <returns></returns>
|
|
public async Task<List<SysRole>> GetUserRoleList(string userId)
|
|
{
|
|
var roleIds = await GetUserRoleIdList(userId);
|
|
var roles = await _sysRoleRep.DetachedEntities.Where(u => roleIds.Contains(u.Id)).ToListAsync();
|
|
return roles;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取用户角色列表
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<List<SysRole>> GetUserRoleList()
|
|
{
|
|
return await GetUserRoleList(UserId);
|
|
}
|
|
|
|
public async Task<List<string>> 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;
|
|
}
|
|
}
|
|
} |