优化角色授权菜单逻辑
This commit is contained in:
parent
ec92b3fa3a
commit
4227f68900
@ -9,6 +9,8 @@ using ZR.Model;
|
|||||||
using ZR.Model.System;
|
using ZR.Model.System;
|
||||||
using ZR.Service.System.IService;
|
using ZR.Service.System.IService;
|
||||||
using ZR.Admin.WebApi.Extensions;
|
using ZR.Admin.WebApi.Extensions;
|
||||||
|
using ZR.Model.System.Dto;
|
||||||
|
using Mapster;
|
||||||
|
|
||||||
namespace ZR.Admin.WebApi.Controllers.System
|
namespace ZR.Admin.WebApi.Controllers.System
|
||||||
{
|
{
|
||||||
@ -78,7 +80,7 @@ namespace ZR.Admin.WebApi.Controllers.System
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 修改角色 √
|
/// 修改角色
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sysRoleDto"></param>
|
/// <param name="sysRoleDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
@ -118,12 +120,12 @@ namespace ZR.Admin.WebApi.Controllers.System
|
|||||||
[HttpPut("dataScope")]
|
[HttpPut("dataScope")]
|
||||||
[ActionPermissionFilter(Permission = "system:role:authorize")]
|
[ActionPermissionFilter(Permission = "system:role:authorize")]
|
||||||
[Log(Title = "角色管理", BusinessType = BusinessType.UPDATE)]
|
[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, "请求参数错误"));
|
if (sysRoleDto == null || sysRoleDto.RoleId <= 0) return ToResponse(ApiResult.Error(101, "请求参数错误"));
|
||||||
|
SysRole sysRole = sysRoleDto.Adapt<SysRole>();
|
||||||
sysRoleDto.Create_by = HttpContext.GetName();
|
sysRoleDto.Create_by = HttpContext.GetName();
|
||||||
sysRoleService.CheckRoleAllowed(sysRoleDto);
|
sysRoleService.CheckRoleAllowed(sysRole);
|
||||||
|
|
||||||
bool result = sysRoleService.AuthDataScope(sysRoleDto);
|
bool result = sysRoleService.AuthDataScope(sysRoleDto);
|
||||||
|
|
||||||
|
|||||||
@ -6,12 +6,16 @@ namespace ZR.Model.System.Dto
|
|||||||
{
|
{
|
||||||
public long RoleId { get; set; }
|
public long RoleId { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 角色分配菜单
|
/// 要添加的菜单集合
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<long> MenuIds { get; set; } = new List<long>();
|
public List<long> MenuIds { get; set; } = new List<long>();
|
||||||
public string RoleName { get; set; }
|
public string RoleName { get; set; }
|
||||||
public string RoleKey { get; set; }
|
public string RoleKey { get; set; }
|
||||||
public int RoleSort { get; set; }
|
public int RoleSort { get; set; }
|
||||||
public string Status { get; set; }
|
public string Status { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 减少菜单集合
|
||||||
|
/// </summary>
|
||||||
|
public List<long> DelMenuIds { get; set; } = new List<long>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
ZR.Model/System/Dto/SysRoleMenuDto.cs
Normal file
18
ZR.Model/System/Dto/SysRoleMenuDto.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace ZR.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class SysRoleMenuDto
|
||||||
|
{
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 角色分配菜单
|
||||||
|
/// </summary>
|
||||||
|
public List<long> MenuIds { get; set; } = new List<long>();
|
||||||
|
public string RoleName { get; set; }
|
||||||
|
public string RoleKey { get; set; }
|
||||||
|
public string Create_by { get; set; }
|
||||||
|
public DateTime Create_time{ get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -72,5 +72,13 @@ namespace ZR.Service.System.IService
|
|||||||
/// <param name="roleId"></param>
|
/// <param name="roleId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
int DeleteRoleMenuByRoleId(long roleId);
|
int DeleteRoleMenuByRoleId(long roleId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除角色指定菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="roleId"></param>
|
||||||
|
/// <param name="menuIds"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool DeleteRoleMenuByRoleIdMenuIds(long roleId, long[] menuIds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using ZR.Model;
|
using ZR.Model;
|
||||||
using ZR.Model.System;
|
using ZR.Model.System;
|
||||||
|
using ZR.Model.System.Dto;
|
||||||
|
|
||||||
namespace ZR.Service.System.IService
|
namespace ZR.Service.System.IService
|
||||||
{
|
{
|
||||||
@ -81,7 +82,7 @@ namespace ZR.Service.System.IService
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="role"></param>
|
/// <param name="role"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
bool AuthDataScope(SysRole role);
|
bool AuthDataScope(SysRoleDto role);
|
||||||
#region Service
|
#region Service
|
||||||
|
|
||||||
|
|
||||||
@ -90,7 +91,7 @@ namespace ZR.Service.System.IService
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sysRoleDto"></param>
|
/// <param name="sysRoleDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public int InsertRoleMenu(SysRole sysRoleDto);
|
public int InsertRoleMenu(SysRoleDto sysRoleDto);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 判断是否是管理员
|
/// 判断是否是管理员
|
||||||
|
|||||||
@ -26,7 +26,10 @@ namespace ZR.Service.System
|
|||||||
{
|
{
|
||||||
return Delete(roleId);
|
return Delete(roleId);
|
||||||
}
|
}
|
||||||
|
public bool DeleteRoleMenuByRoleIdMenuIds(long roleId, long[] menuIds)
|
||||||
|
{
|
||||||
|
return Delete(f => f.Role_id == roleId && menuIds.Contains(f.Menu_id));
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据角色获取菜单id
|
/// 根据角色获取菜单id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -7,6 +7,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using ZR.Model;
|
using ZR.Model;
|
||||||
using ZR.Model.System;
|
using ZR.Model.System;
|
||||||
|
using ZR.Model.System.Dto;
|
||||||
using ZR.Repository;
|
using ZR.Repository;
|
||||||
using ZR.Service.System.IService;
|
using ZR.Service.System.IService;
|
||||||
|
|
||||||
@ -179,15 +180,31 @@ namespace ZR.Service
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sysRoleDto"></param>
|
/// <param name="sysRoleDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool AuthDataScope(SysRole sysRoleDto)
|
public bool AuthDataScope(SysRoleDto sysRoleDto)
|
||||||
{
|
{
|
||||||
return UseTran2(() =>
|
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);
|
InsertRoleMenu(sysRoleDto);
|
||||||
|
Console.WriteLine($"减少了{delMenuIds.Length},增加了{addMenuIds.Length}菜单");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Service
|
#region Service
|
||||||
|
|
||||||
|
|
||||||
@ -196,14 +213,14 @@ namespace ZR.Service
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sysRoleDto"></param>
|
/// <param name="sysRoleDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public int InsertRoleMenu(SysRole sysRoleDto)
|
public int InsertRoleMenu(SysRoleDto sysRoleDto)
|
||||||
{
|
{
|
||||||
int rows = 1;
|
int rows = 1;
|
||||||
// 新增用户与角色管理
|
// 新增用户与角色管理
|
||||||
List<SysRoleMenu> sysRoleMenus = new List<SysRoleMenu>();
|
List<SysRoleMenu> sysRoleMenus = new();
|
||||||
foreach (var item in sysRoleDto.MenuIds)
|
foreach (var item in sysRoleDto.MenuIds)
|
||||||
{
|
{
|
||||||
SysRoleMenu rm = new SysRoleMenu
|
SysRoleMenu rm = new()
|
||||||
{
|
{
|
||||||
Menu_id = item,
|
Menu_id = item,
|
||||||
Role_id = sysRoleDto.RoleId,
|
Role_id = sysRoleDto.RoleId,
|
||||||
|
|||||||
@ -16,13 +16,6 @@ namespace ZR.Service.System
|
|||||||
[AppService(ServiceType = typeof(ISysUserRoleService), ServiceLifetime = LifeTime.Transient)]
|
[AppService(ServiceType = typeof(ISysUserRoleService), ServiceLifetime = LifeTime.Transient)]
|
||||||
public class SysUserRoleService : BaseService<SysUserRole>, ISysUserRoleService
|
public class SysUserRoleService : BaseService<SysUserRole>, ISysUserRoleService
|
||||||
{
|
{
|
||||||
//public SysUserRoleRepository SysUserRoleRepository;
|
|
||||||
|
|
||||||
//public SysUserRoleService(SysUserRoleRepository sysUserRoleRepository)
|
|
||||||
//{
|
|
||||||
// SysUserRoleRepository = sysUserRoleRepository;
|
|
||||||
//}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 通过角色ID查询角色使用数量
|
/// 通过角色ID查询角色使用数量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -85,7 +78,6 @@ namespace ZR.Service.System
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public PagedInfo<SysUser> GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto)
|
public PagedInfo<SysUser> GetSysUsersByRoleId(RoleUserQueryDto roleUserQueryDto)
|
||||||
{
|
{
|
||||||
//return SysUserRoleRepository.GetSysUsersByRoleId(roleUserQueryDto);
|
|
||||||
var query = Context.Queryable<SysUserRole, SysUser>((t1, u) => new JoinQueryInfos(
|
var query = Context.Queryable<SysUserRole, SysUser>((t1, u) => new JoinQueryInfos(
|
||||||
JoinType.Left, t1.UserId == u.UserId))
|
JoinType.Left, t1.UserId == u.UserId))
|
||||||
.Where((t1, u) => t1.RoleId == roleUserQueryDto.RoleId && u.DelFlag == "0");
|
.Where((t1, u) => t1.RoleId == roleUserQueryDto.RoleId && u.DelFlag == "0");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user