using iWare.Wms.Core;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Microsoft.EntityFrameworkCore;
namespace iWare.Wms.Application
{
///
/// 用户角色服务
///
public class SysUserRoleService : ISysUserRoleService, ITransient
{
private readonly IRepository _sysUserRoleRep; // 用户权限表仓储
private readonly ISysRoleService _sysRoleService;
public SysUserRoleService(IRepository sysUserRoleRep, ISysRoleService sysRoleService)
{
_sysUserRoleRep = sysUserRoleRep;
_sysRoleService = sysRoleService;
}
///
/// 获取用户的角色Id集合
///
///
///
///
public async Task> GetUserRoleIdList(long userId, bool checkRoleStatus = true)
{
return await _sysUserRoleRep
// 检查role状态,跳过全局tenantId&delete过滤器,超级管理员使用
.Where(!checkRoleStatus, u => u.SysRole.Status == CommonStatus.ENABLE && !u.SysRole.IsDeleted, ignoreQueryFilters: true)
// 当不是超级管理员的时候检查role状态和全局tenantId&delete过滤器
.Where(checkRoleStatus, u => u.SysRole.Status == CommonStatus.ENABLE)
.Where(u => u.SysUserId == userId)
.Select(u => u.SysRoleId)
.ToListAsync();
}
///
/// 授权用户角色
///
///
///
[UnitOfWork]
public async Task GrantRole(UpdateUserRoleDataInput input)
{
var userRoles = await _sysUserRoleRep.Where(u => u.SysUserId == input.Id).ToListAsync();
await _sysUserRoleRep.DeleteAsync(userRoles);
var roles = input.GrantRoleIdList.Select(u => new SysUserRole
{
SysUserId = input.Id,
SysRoleId = u
}).ToList();
await _sysUserRoleRep.InsertAsync(roles);
}
///
/// 获取用户所有角色的数据范围(组织机构Id集合)
///
///
///
///
public async Task> GetUserRoleDataScopeIdList(long userId, long orgId)
{
var roleIdList = await GetUserRoleIdList(userId);
// 获取这些角色对应的数据范围
if (roleIdList.Count > 0)
return await _sysRoleService.GetUserDataScopeIdList(roleIdList, orgId);
return roleIdList;
}
///
/// 根据角色Id删除对应的用户-角色表关联信息
///
///
///
public async Task DeleteUserRoleListByRoleId(long roleId)
{
var userRoles = await _sysUserRoleRep.Where(u => u.SysRoleId == roleId).ToListAsync();
await _sysUserRoleRep.DeleteAsync(userRoles);
}
///
/// 根据用户Id删除对应的用户-角色表关联信息
///
///
///
public async Task DeleteUserRoleListByUserId(long userId)
{
var surList = await _sysUserRoleRep.AsQueryable(m => m.SysUserId == userId, false).ToListAsync();
await _sysUserRoleRep.DeleteAsync(surList);
}
}
}