TenantAppService.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using BaseService.Systems.TenantManagement.Dto;
  2. using BaseService.Systems.UserRoleMenusManagement.Dto;
  3. using Microsoft.AspNetCore.Authorization;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8. using Volo.Abp.Application.Dtos;
  9. using Volo.Abp.Application.Services;
  10. using Volo.Abp.Domain.Repositories;
  11. using Volo.Abp.Identity;
  12. using Volo.Abp.TenantManagement;
  13. namespace BaseService.Systems.TenantManagement
  14. {
  15. [Authorize(TenantManagementPermissions.Tenants.Default)]
  16. public class TenantAppService : ApplicationService, ITenantAppService
  17. {
  18. protected ITenantRepository TenantRepository { get; }
  19. public IIdentityRoleRepository RoleRepository { get; }
  20. private readonly IRepository<Menu, Guid> _menuRepository;
  21. private readonly IRepository<RoleMenu> _roleMenuRepository;
  22. public TenantAppService(
  23. IRepository<Menu, Guid> menuRepository,
  24. ITenantRepository tenantRepository,
  25. IIdentityRoleRepository roleRepository,
  26. IRepository<RoleMenu> roleMenuRepository)
  27. {
  28. _menuRepository = menuRepository;
  29. TenantRepository = tenantRepository;
  30. RoleRepository = roleRepository;
  31. _roleMenuRepository = roleMenuRepository;
  32. }
  33. public async Task<ListResultDto<MenusListDto>> GetTenantMenusList()
  34. {
  35. var result = await _menuRepository.GetListAsync(_ => _.IsHost == false);
  36. var dtos = ObjectMapper.Map<List<Menu>, List<MenusListDto>>(result);
  37. return new ListResultDto<MenusListDto>(dtos.OrderBy(_ => _.Sort).ToList());
  38. }
  39. public async Task<ListResultDto<MenusListDto>> GetTenantMenusById(Guid id)
  40. {
  41. var tenant = await TenantRepository.GetAsync(id);
  42. using (CurrentTenant.Change(tenant.Id))
  43. {
  44. var result = await _menuRepository.GetListAsync();
  45. var dtos = ObjectMapper.Map<List<Menu>, List<MenusListDto>>(result);
  46. return new ListResultDto<MenusListDto>(dtos.OrderBy(_ => _.Sort).ToList());
  47. }
  48. }
  49. public async Task UpdateTenantMenu(UpdateTenantMenuDto input)
  50. {
  51. var tenant = await TenantRepository.GetAsync(input.TenantId);
  52. using (CurrentTenant.Change(tenant.Id))
  53. {
  54. var menus = await _menuRepository.GetListAsync();
  55. var adminRole = (await RoleRepository.GetListAsync()).First(t => t.Name == "admin");
  56. //清除租户所有角色菜单,TODO:清除租户角色权限
  57. await _roleMenuRepository.DeleteAsync(_ => menus.Select(m => m.Id).Contains(_.MenuId));
  58. foreach (var menu in menus)
  59. {
  60. if (input.MenuIds.Contains(menu.Id))
  61. {
  62. menu.IsHost = false;
  63. //添加租户admin角色菜单
  64. await _roleMenuRepository.InsertAsync(new RoleMenu(adminRole.Id, menu.Id));
  65. }
  66. else
  67. menu.IsHost = true;
  68. }
  69. }
  70. }
  71. }
  72. }