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