From 4227f689005fbcb0e6ec1ab22586eecea512d261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Fri, 12 May 2023 08:03:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A7=92=E8=89=B2=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E8=8F=9C=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/SysRoleController.cs | 10 ++++--- ZR.Model/System/Dto/SysRoleDto.cs | 6 ++++- ZR.Model/System/Dto/SysRoleMenuDto.cs | 18 +++++++++++++ ZR.Service/System/IService/ISysMenuService.cs | 8 ++++++ ZR.Service/System/IService/ISysRoleService.cs | 5 ++-- ZR.Service/System/SysRoleMenuService.cs | 5 +++- ZR.Service/System/SysRoleService.cs | 27 +++++++++++++++---- ZR.Service/System/SysUserRoleService.cs | 8 ------ 8 files changed, 66 insertions(+), 21 deletions(-) create mode 100644 ZR.Model/System/Dto/SysRoleMenuDto.cs diff --git a/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs b/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs index a79b551..7e3f7b8 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysRoleController.cs @@ -9,6 +9,8 @@ using ZR.Model; using ZR.Model.System; using ZR.Service.System.IService; using ZR.Admin.WebApi.Extensions; +using ZR.Model.System.Dto; +using Mapster; namespace ZR.Admin.WebApi.Controllers.System { @@ -78,7 +80,7 @@ namespace ZR.Admin.WebApi.Controllers.System } /// - /// 修改角色 √ + /// 修改角色 /// /// /// @@ -118,12 +120,12 @@ namespace ZR.Admin.WebApi.Controllers.System [HttpPut("dataScope")] [ActionPermissionFilter(Permission = "system:role:authorize")] [Log(Title = "角色管理", BusinessType = BusinessType.UPDATE)] - public IActionResult DataScope([FromBody] SysRole sysRoleDto) + public IActionResult DataScope([FromBody] SysRoleDto sysRoleDto) { if (sysRoleDto == null || sysRoleDto.RoleId <= 0) return ToResponse(ApiResult.Error(101, "请求参数错误")); - + SysRole sysRole = sysRoleDto.Adapt(); sysRoleDto.Create_by = HttpContext.GetName(); - sysRoleService.CheckRoleAllowed(sysRoleDto); + sysRoleService.CheckRoleAllowed(sysRole); bool result = sysRoleService.AuthDataScope(sysRoleDto); diff --git a/ZR.Model/System/Dto/SysRoleDto.cs b/ZR.Model/System/Dto/SysRoleDto.cs index 241756d..1ff297f 100644 --- a/ZR.Model/System/Dto/SysRoleDto.cs +++ b/ZR.Model/System/Dto/SysRoleDto.cs @@ -6,12 +6,16 @@ namespace ZR.Model.System.Dto { public long RoleId { get; set; } /// - /// 角色分配菜单 + /// 要添加的菜单集合 /// public List MenuIds { get; set; } = new List(); public string RoleName { get; set; } public string RoleKey { get; set; } public int RoleSort { get; set; } public string Status { get; set; } + /// + /// 减少菜单集合 + /// + public List DelMenuIds { get; set; } = new List(); } } diff --git a/ZR.Model/System/Dto/SysRoleMenuDto.cs b/ZR.Model/System/Dto/SysRoleMenuDto.cs new file mode 100644 index 0000000..fd801f1 --- /dev/null +++ b/ZR.Model/System/Dto/SysRoleMenuDto.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace ZR.Model.System.Dto +{ + public class SysRoleMenuDto + { + public long RoleId { get; set; } + /// + /// 角色分配菜单 + /// + public List MenuIds { get; set; } = new List(); + public string RoleName { get; set; } + public string RoleKey { get; set; } + public string Create_by { get; set; } + public DateTime Create_time{ get; set; } + } +} diff --git a/ZR.Service/System/IService/ISysMenuService.cs b/ZR.Service/System/IService/ISysMenuService.cs index 9f31a12..2eb3abc 100644 --- a/ZR.Service/System/IService/ISysMenuService.cs +++ b/ZR.Service/System/IService/ISysMenuService.cs @@ -72,5 +72,13 @@ namespace ZR.Service.System.IService /// /// int DeleteRoleMenuByRoleId(long roleId); + + /// + /// 删除角色指定菜单 + /// + /// + /// + /// + bool DeleteRoleMenuByRoleIdMenuIds(long roleId, long[] menuIds); } } diff --git a/ZR.Service/System/IService/ISysRoleService.cs b/ZR.Service/System/IService/ISysRoleService.cs index cff824d..300ba37 100644 --- a/ZR.Service/System/IService/ISysRoleService.cs +++ b/ZR.Service/System/IService/ISysRoleService.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using ZR.Model; using ZR.Model.System; +using ZR.Model.System.Dto; namespace ZR.Service.System.IService { @@ -81,7 +82,7 @@ namespace ZR.Service.System.IService /// /// /// - bool AuthDataScope(SysRole role); + bool AuthDataScope(SysRoleDto role); #region Service @@ -90,7 +91,7 @@ namespace ZR.Service.System.IService /// /// /// - public int InsertRoleMenu(SysRole sysRoleDto); + public int InsertRoleMenu(SysRoleDto sysRoleDto); /// /// 判断是否是管理员 diff --git a/ZR.Service/System/SysRoleMenuService.cs b/ZR.Service/System/SysRoleMenuService.cs index 7327937..bebdee2 100644 --- a/ZR.Service/System/SysRoleMenuService.cs +++ b/ZR.Service/System/SysRoleMenuService.cs @@ -26,7 +26,10 @@ namespace ZR.Service.System { return Delete(roleId); } - + public bool DeleteRoleMenuByRoleIdMenuIds(long roleId, long[] menuIds) + { + return Delete(f => f.Role_id == roleId && menuIds.Contains(f.Menu_id)); + } /// /// 根据角色获取菜单id /// diff --git a/ZR.Service/System/SysRoleService.cs b/ZR.Service/System/SysRoleService.cs index 86050c9..57d4d0e 100644 --- a/ZR.Service/System/SysRoleService.cs +++ b/ZR.Service/System/SysRoleService.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Linq; using ZR.Model; using ZR.Model.System; +using ZR.Model.System.Dto; using ZR.Repository; using ZR.Service.System.IService; @@ -179,15 +180,31 @@ namespace ZR.Service /// /// /// - public bool AuthDataScope(SysRole sysRoleDto) + public bool AuthDataScope(SysRoleDto sysRoleDto) { return UseTran2(() => { //删除角色菜单 - DeleteRoleMenuByRoleId(sysRoleDto.RoleId); + //DeleteRoleMenuByRoleId(sysRoleDto.RoleId); + //InsertRoleMenu(sysRoleDto); + var oldMenus = SelectUserRoleMenus(sysRoleDto.RoleId); + var newMenus = sysRoleDto.MenuIds; + + //并集菜单 + var arr_c = oldMenus.Intersect(newMenus).ToArray(); + //获取减量菜单 + var delMenuIds = oldMenus.Where(c => !arr_c.Contains(c)).ToArray(); + //获取增量 + var addMenuIds = newMenus.Where(c => !arr_c.Contains(c)).ToArray(); + + RoleMenuService.DeleteRoleMenuByRoleIdMenuIds(sysRoleDto.RoleId, delMenuIds); + sysRoleDto.MenuIds = addMenuIds.ToList(); + sysRoleDto.DelMenuIds= delMenuIds.ToList(); InsertRoleMenu(sysRoleDto); + Console.WriteLine($"减少了{delMenuIds.Length},增加了{addMenuIds.Length}菜单"); }); } + #region Service @@ -196,14 +213,14 @@ namespace ZR.Service /// /// /// - public int InsertRoleMenu(SysRole sysRoleDto) + public int InsertRoleMenu(SysRoleDto sysRoleDto) { int rows = 1; // 新增用户与角色管理 - List sysRoleMenus = new List(); + List sysRoleMenus = new(); foreach (var item in sysRoleDto.MenuIds) { - SysRoleMenu rm = new SysRoleMenu + SysRoleMenu rm = new() { Menu_id = item, Role_id = sysRoleDto.RoleId, diff --git a/ZR.Service/System/SysUserRoleService.cs b/ZR.Service/System/SysUserRoleService.cs index 35f7ba1..37139f5 100644 --- a/ZR.Service/System/SysUserRoleService.cs +++ b/ZR.Service/System/SysUserRoleService.cs @@ -16,13 +16,6 @@ namespace ZR.Service.System [AppService(ServiceType = typeof(ISysUserRoleService), ServiceLifetime = LifeTime.Transient)] public class SysUserRoleService : BaseService, ISysUserRoleService { - //public SysUserRoleRepository SysUserRoleRepository; - - //public SysUserRoleService(SysUserRoleRepository sysUserRoleRepository) - //{ - // SysUserRoleRepository = sysUserRoleRepository; - //} - /// /// 通过角色ID查询角色使用数量 /// @@ -85,7 +78,6 @@ namespace ZR.Service.System /// public PagedInfo GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto) { - //return SysUserRoleRepository.GetSysUsersByRoleId(roleUserQueryDto); var query = Context.Queryable((t1, u) => new JoinQueryInfos( JoinType.Left, t1.UserId == u.UserId)) .Where((t1, u) => t1.RoleId == roleUserQueryDto.RoleId && u.DelFlag == "0");