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;
}
}
}