SysRoleMenuService.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. namespace Admin.NET.Core.Service;
  2. /// <summary>
  3. /// 系统角色菜单服务
  4. /// </summary>
  5. public class SysRoleMenuService : ITransient
  6. {
  7. private readonly SqlSugarRepository<SysRoleMenu> _sysRoleMenuRep;
  8. private readonly SysCacheService _sysCacheService;
  9. public SysRoleMenuService(SqlSugarRepository<SysRoleMenu> sysRoleMenuRep,
  10. SysCacheService sysCacheService)
  11. {
  12. _sysRoleMenuRep = sysRoleMenuRep;
  13. _sysCacheService = sysCacheService;
  14. }
  15. /// <summary>
  16. /// 根据角色Id集合获取菜单Id集合
  17. /// </summary>
  18. /// <param name="roleIdList"></param>
  19. /// <returns></returns>
  20. public async Task<List<long>> GetRoleMenuIdList(List<long> roleIdList)
  21. {
  22. return await _sysRoleMenuRep.AsQueryable()
  23. .Where(u => roleIdList.Contains(u.RoleId))
  24. .Select(u => u.MenuId).ToListAsync();
  25. }
  26. /// <summary>
  27. /// 根据角色Id集合获取菜单树
  28. /// </summary>
  29. /// <param name="roleIdList"></param>
  30. /// <returns></returns>
  31. public async Task<List<SysMenu>> GetRoleMenuTree(List<long> roleIdList)
  32. {
  33. var menuIdList = await _sysRoleMenuRep.AsQueryable()
  34. .Where(u => roleIdList.Contains(u.RoleId))
  35. .Select(u => u.MenuId).ToListAsync();
  36. return await _sysRoleMenuRep.ChangeRepository<SqlSugarRepository<SysMenu>>().AsQueryable()
  37. .Where(u => menuIdList.Contains(u.Id))
  38. .ToTreeAsync(u => u.Children, u => u.Pid, 0);
  39. }
  40. /// <summary>
  41. /// 根据角色Id集合获取菜单集合
  42. /// </summary>
  43. /// <param name="roleIdList"></param>
  44. /// <returns></returns>
  45. public async Task<List<long>> GetRoleMenuList(List<long> roleIdList)
  46. {
  47. return await _sysRoleMenuRep.AsQueryable()
  48. .InnerJoin<SysMenu>((a, b) => a.MenuId == b.Id)
  49. .Where((a, b) => roleIdList.Contains(a.RoleId) && b.Type == MenuTypeEnum.Btn)
  50. .Select((a, b) => b.Id).ToListAsync();
  51. }
  52. /// <summary>
  53. /// 授权角色菜单
  54. /// </summary>
  55. /// <param name="input"></param>
  56. /// <returns></returns>
  57. [UnitOfWork]
  58. public async Task GrantRoleMenu(RoleMenuInput input)
  59. {
  60. await _sysRoleMenuRep.DeleteAsync(u => u.RoleId == input.Id);
  61. var menus = input.MenuIdList.Select(u => new SysRoleMenu
  62. {
  63. RoleId = input.Id,
  64. MenuId = u
  65. }).ToList();
  66. await _sysRoleMenuRep.InsertRangeAsync(menus);
  67. // 清除缓存
  68. _sysCacheService.RemoveByPrefixKey(CacheConst.KeyMenu);
  69. _sysCacheService.RemoveByPrefixKey(CacheConst.KeyPermission);
  70. }
  71. /// <summary>
  72. /// 根据菜单Id集合删除角色菜单
  73. /// </summary>
  74. /// <param name="menuIdList"></param>
  75. /// <returns></returns>
  76. public async Task DeleteRoleMenuByMenuIdList(List<long> menuIdList)
  77. {
  78. await _sysRoleMenuRep.DeleteAsync(u => menuIdList.Contains(u.MenuId));
  79. }
  80. /// <summary>
  81. /// 根据角色Id删除角色菜单
  82. /// </summary>
  83. /// <param name="roleId"></param>
  84. /// <returns></returns>
  85. public async Task DeleteRoleMenuByRoleId(long roleId)
  86. {
  87. await _sysRoleMenuRep.DeleteAsync(u => u.RoleId == roleId);
  88. }
  89. }