diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/IServices/IRoleService.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/IServices/IRoleService.cs index ac94d752..df48ee92 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/IServices/IRoleService.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application.Contracts/IServices/IRoleService.cs @@ -1,3 +1,4 @@ +using Microsoft.AspNetCore.Mvc; using Volo.Abp.Application.Services; using Yi.Framework.Ddd.Application.Contracts; using Yi.Framework.Rbac.Application.Contracts.Dtos.Role; @@ -9,6 +10,18 @@ namespace Yi.Framework.Rbac.Application.Contracts.IServices /// public interface IRoleService : IYiCrudAppService { + /// + /// 获取角色菜单树 + /// + /// 角色ID + /// 角色菜单树数据,包含已选中的菜单ID和菜单树结构 + Task GetMenuTreeAsync(Guid roleId); + /// + /// 获取角色部门树 + /// + /// 角色ID + /// 角色部门树数据,包含已选中的部门ID和部门树结构 + Task GetDeptTreeAsync(Guid roleId); } } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/System/RoleService.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/System/RoleService.cs index 6188f0ce..9f6fb7bb 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/System/RoleService.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/System/RoleService.cs @@ -26,10 +26,12 @@ namespace Yi.Framework.Rbac.Application.Services.System { public RoleService(RoleManager roleManager, ISqlSugarRepository roleDeptRepository, ISqlSugarRepository userRoleRepository, - ISqlSugarRepository repository) : base(repository) + ISqlSugarRepository repository, + ISqlSugarRepository menuRepository, + ISqlSugarRepository deptRepository) : base(repository) { - (_roleManager, _roleDeptRepository, _userRoleRepository, _repository) = - (roleManager, roleDeptRepository, userRoleRepository, repository); + (_roleManager, _roleDeptRepository, _userRoleRepository, _repository, _menuRepository, _deptRepository) = + (roleManager, roleDeptRepository, userRoleRepository, repository, menuRepository, deptRepository); } private ISqlSugarRepository _repository; @@ -38,6 +40,10 @@ namespace Yi.Framework.Rbac.Application.Services.System private ISqlSugarRepository _roleDeptRepository; private ISqlSugarRepository _userRoleRepository; + + private ISqlSugarRepository _menuRepository; + + private ISqlSugarRepository _deptRepository; public async Task UpdateDataScopeAsync(UpdateDataScopeInput input) { @@ -215,5 +221,45 @@ namespace Yi.Framework.Rbac.Application.Services.System .ExecuteCommandAsync(); ; } + + /// + /// 获取角色菜单树 + /// + /// + /// + public async Task GetMenuTreeAsync(Guid roleId) + { + var checkedKeys = await _menuRepository._DbQueryable + .Where(m => SqlFunc.Subqueryable().Where(rm => rm.RoleId == roleId && rm.MenuId == m.Id).Any()) + .Select(x => x.Id).ToListAsync(); + var menus = await _menuRepository._DbQueryable.ToListAsync(); + var menuTrees = menus.TreeDtoBuild(); + return new JsonResult(new + { + checkedKeys, + menus = menuTrees + }); + } + + /// + /// 获取角色部门树 + /// + /// + /// + public async Task GetDeptTreeAsync(Guid roleId) + { + var checkedKeys = await _deptRepository._DbQueryable + .Where(d => SqlFunc.Subqueryable().Where(rd => rd.RoleId == roleId && rd.DeptId == d.Id).Any()) + .Select(x => x.Id).ToListAsync(); + var deptList = await _deptRepository._DbQueryable + .Where(x => x.State == true) + .OrderBy(x => x.OrderNum, OrderByType.Asc) + .ToListAsync(); + return new JsonResult(new + { + checkedKeys, + depts = deptList.DeptTreeBuild() + }); + } } } \ No newline at end of file