using Furion.DatabaseAccessor.Extensions; using YBEE.EQM.Core; namespace YBEE.EQM.Application; /// /// 角色服务 /// public class SysRoleService : ISysRoleService, ITransient { private readonly IRepository _roleRep; private readonly IRepository _roleUserRep; private readonly ISysRoleMenuService _roleMenuService; private readonly ICacheService _cacheService; public SysRoleService(IRepository roleRep, IRepository roleUserRep, ISysRoleMenuService roleMenuService, ICacheService cacheService) { _roleRep = roleRep; _roleUserRep = roleUserRep; _roleMenuService = roleMenuService; _cacheService = cacheService; } /// /// 添加角色 /// /// /// public async Task Add(AddSysRoleInput input) { var isExist = await _roleRep.DetachedEntities.AnyAsync(u => u.Name == input.Name); if (isExist) { throw Oops.Oh(ErrorCode.E2004); } var role = input.Adapt(); role.RoleType = RoleType.NORMAL; await role.InsertNowAsync(); } /// /// 删除角色 /// /// /// public async Task Del(DeleteSysRoleInput input) { var sysRole = await _roleRep.FirstOrDefaultAsync(u => u.Id == input.Id); if (sysRole.RoleType != RoleType.NORMAL) { throw Oops.Oh(ErrorCode.E8201); } await sysRole.DeleteNowAsync(); //级联删除该角色对应的用户-角色表关联信息 var userRoles = await _roleUserRep.Where(u => u.SysRoleId == sysRole.Id).ToListAsync(); await _roleUserRep.DeleteAsync(userRoles); //级联删除该角色对应的角色-菜单表关联信息 await _roleMenuService.DeleteRoleMenuListByRoleId(sysRole.Id); } /// /// 更新角色 /// /// /// public async Task Update(UpdateSysRoleInput input) { var role = await _roleRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id); if (role.RoleType != RoleType.NORMAL) { throw Oops.Oh(ErrorCode.E8202); } var isExist = await _roleRep.DetachedEntities.AnyAsync(u => u.Name == input.Name && u.Id != input.Id); if (isExist) { throw Oops.Oh(ErrorCode.E2004); } var sysRole = input.Adapt(); await sysRole.UpdateExcludeNowAsync(new[] { nameof(sysRole.RoleDataScope) }); } /// /// 设置角色数据权限范围 /// /// public async Task SetDataScope() { // TODO: // 清空缓存,DelByPatternAsync,CommonConst.CACHE_KEY_PERMISSION } /// /// 获取当前用户角色数据权限范围 /// /// public async Task GetCurrentUserDataScope() { var roles = await _cacheService.GetRoleDataScope(CurrentSysUserInfo.SysUserId); if (roles == null) { return new(); } RoleDataScope roleDataScope = new(); foreach (var role in roles) { roleDataScope.EducationStages.AddRange(role.RoleDataScope.EducationStages); roleDataScope.SysOrgIds.AddRange(role.RoleDataScope.SysOrgIds); roleDataScope.TwoWayTables.AddRange(role.RoleDataScope.TwoWayTables); } roleDataScope.EducationStages = roleDataScope.EducationStages.Distinct().ToList(); roleDataScope.SysOrgIds = roleDataScope.SysOrgIds.Distinct().ToList(); roleDataScope.TwoWayTables = roleDataScope.TwoWayTables.Distinct().ToList(); return roleDataScope; } /// /// 获取所有角色 /// /// public async Task> GetAllList() { return await _roleRep.DetachedEntities.OrderBy(u => u.RoleType).ProjectToType().ToListAsync(); } /// /// 根据角色ID列表获取角色列表 /// /// /// public async Task> GetListByIds(List ids) { return await _roleRep.DetachedEntities.Where(t => ids.Contains(t.Id)).ProjectToType().ToListAsync(); } }