using OpenAuth.App.Interface; using OpenAuth.App.Response; using OpenAuth.Repository.Domain; using Infrastructure; using OpenAuth.App.Request; using OpenAuth.Repository; using SqlSugar; using OpenAuth.App.Base; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.BasicQueryService; namespace OpenAuth.App { public class RoleApp : SqlSugarBaseApp { UserManager userManager; public RoleApp( ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, UserManager userManager ) : base(unitWork, repository, auth) { this.userManager = userManager; } #region 查询 /// /// 查询所有角色分页 /// public async Task>>> LoadAllPage(QueryRoleListReq request) { RefAsync totalCount = 0; var result = new PageInfo(); var roles = await base.Repository.AsQueryable() .WhereIF(!string.IsNullOrEmpty(request.key), r => r.Name.Contains(request.key)) .OrderByDescending(r => r.CreateTime) .ToPageListAsync(request.page, request.limit, totalCount); return new Response>> { Result = new PageInfo> { Items = roles, Total = totalCount } }; } /// /// 登录用户可访问的角色分页 /// /// /// public async Task>>> LoadPage(QueryRoleListReq request) { long userId = long.Parse(_auth.GetUserId()); RefAsync totalCount = 0; var result = new PageInfo(); var roles = await userManager.UserRoles(userId) .WhereIF(!string.IsNullOrEmpty(request.key), (u, r) => r.Name.Contains(request.key)) .OrderByDescending((u, r) => r.CreateTime) .Select((u, r) => r) .ToPageListAsync(request.page, request.limit, totalCount); return new Response>> { Result = new PageInfo> { Items = roles, Total = totalCount } }; } public async Task> UserRoles(long userId) { return await base.Repository.AsSugarClient().Queryable() .Where(ur => ur.UserId == userId) .Select(ur => ur.RoleId).ToListAsync(); } #endregion public SysRole Get(long id) { return Repository.GetById(id); } /// /// 添加角色 /// public async Task> Add(RoleView obj) { SysRole role = obj; role.CreateTime = DateTime.Now; role.Id = Yitter.IdGenerator.YitIdHelper.NextId(); var flag = await Repository.InsertAsync(role); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 删除角色时,需要删除角色对应的权限 /// /// public async Task> Delete(long[] ids) { using (var uwo = UnitWork.CreateContext()) { await uwo.SysRoleModule.DeleteAsync(a => ids.Contains(a.RoleId)); await uwo.SysRoleElement.DeleteAsync(a => ids.Contains(a.RoleId)); await uwo.Role.DeleteAsync(u => ids.Contains(u.Id)); var flag = uwo.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } /// /// 更新角色属性 /// /// public async Task> Update(RoleView obj) { SysRole role = obj; bool flag = await base.Repository.UpdateAsync(u => new SysRole { Name = role.Name, Status = role.Status }, u => u.Id == obj.Id); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 为角色分配菜单和按钮 /// /// /// public async Task> AssignModule(ModuleElementWithRole model) { using (var uwo = UnitWork.CreateContext()) { await uwo.SysRoleModule.DeleteAsync(a => a.RoleId == model.RoleId); await uwo.SysRoleElement.DeleteAsync(a => a.RoleId == model.RoleId); await uwo.SysRoleModule.InsertRangeAsync(model.ModuleIds.Select(a => new SysRoleModule { RoleId = model.RoleId, ModuleId = a }).ToList()); await uwo.SysRoleElement.InsertRangeAsync(model.ElementIds.Select(a => new SysRoleElement { RoleId = model.RoleId, ElementId = a }).ToList()); var flag = uwo.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } } }