From 96503a2f150d9dd80a198d3af6dc2f3c2e12cd13 Mon Sep 17 00:00:00 2001 From: wcg Date: Sun, 4 Jan 2026 11:29:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(role):=20=E6=B7=BB=E5=8A=A0=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E8=8F=9C=E5=8D=95=E5=92=8C=E9=83=A8=E9=97=A8=E6=A0=91?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IServices/IRoleService.cs | 13 +++++ .../Services/System/RoleService.cs | 52 +++++++++++++++++-- 2 files changed, 62 insertions(+), 3 deletions(-) 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