😎解决按钮状态为“禁用”时非超管账户仍然可以显示的问题

This commit is contained in:
zuohuaijun 2025-03-10 13:04:22 +08:00
parent 8609879431
commit 6a2ad8c850
2 changed files with 33 additions and 33 deletions

View File

@ -361,6 +361,8 @@ public class SysRoleService : IDynamicApiController, ITransient
if (apiList != null) return apiList; if (apiList != null) return apiList;
apiList = [[], []]; apiList = [[], []];
// 所有按钮权限集合
var allButtonList = await GetButtonList();
// 超管账号获取所有接口 // 超管账号获取所有接口
if (_userManager.SuperAdmin) if (_userManager.SuperAdmin)
{ {
@ -371,9 +373,7 @@ public class SysRoleService : IDynamicApiController, ITransient
apiList[0].AddRange(controller.Children.Select(u => u.Route)); apiList[0].AddRange(controller.Children.Select(u => u.Route));
} }
// 所有按钮权限集合 // 接口没有对应的按钮权限集合
var allButtonList = await GetButtonList();
// 没有接口对应的按钮权限集合
var diffButtonList = allButtonList.Except(apiList[0]).ToList(); // 差集 var diffButtonList = allButtonList.Except(apiList[0]).ToList(); // 差集
apiList[0].AddRange(diffButtonList); apiList[0].AddRange(diffButtonList);
} }
@ -381,14 +381,12 @@ public class SysRoleService : IDynamicApiController, ITransient
{ {
// 当前账号所有角色集合 // 当前账号所有角色集合
var roleIdList = await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId); var roleIdList = await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId);
// 已有按钮权限集合
var menuIdList = await _sysRoleMenuService.GetRoleMenuIdList(roleIdList);
apiList[0] = await GetButtonList(menuIdList, false);
// 已勾选按钮权限集合 // 未有按钮权限集合(放到接口黑名单里面)
apiList[0] = await GetRoleButtonList(roleIdList);
// 未勾选按钮权限集合(放到接口黑名单里面)
var allButtonList = await GetButtonList();
apiList[1] = allButtonList.Except(apiList[0]).ToList(); // 差集 apiList[1] = allButtonList.Except(apiList[0]).ToList(); // 差集
// 接口黑名单集合 // 接口黑名单集合
var roleApiList = await _sysRoleApiService.GetRoleApiList(roleIdList); var roleApiList = await _sysRoleApiService.GetRoleApiList(roleIdList);
apiList[1].AddRange(roleApiList); apiList[1].AddRange(roleApiList);
@ -417,28 +415,30 @@ public class SysRoleService : IDynamicApiController, ITransient
// return await GetButtonList(menuIdList); // return await GetButtonList(menuIdList);
//} //}
/// <summary> ///// <summary>
/// 获取角色按钮权限集合 ///// 获取角色按钮权限集合
/// </summary> ///// </summary>
/// <param name="roleIds"></param> ///// <param name="roleIds"></param>
/// <returns></returns> ///// <returns></returns>
[NonAction] //[NonAction]
public async Task<List<string>> GetRoleButtonList(List<long> roleIds) //public async Task<List<string>> GetRoleButtonList(List<long> roleIds)
{ //{
var menuIdList = await _sysRoleMenuService.GetRoleMenuIdList(roleIds); // var menuIdList = await _sysRoleMenuService.GetRoleMenuIdList(roleIds);
return await GetButtonList(menuIdList); // return await GetButtonList(menuIdList);
} //}
/// <summary> /// <summary>
/// 根据菜单Id集合获取按钮集合 /// 根据菜单Id集合获取按钮集合
/// </summary> /// </summary>
/// <param name="menuIds"></param> /// <param name="menuIds"></param>
/// <param name="isAll"></param>
/// <returns></returns> /// <returns></returns>
private async Task<List<string>> GetButtonList(List<long> menuIds = null) private async Task<List<string>> GetButtonList(List<long> menuIds = null, bool isAll = true)
{ {
return await _sysRoleRep.ChangeRepository<SqlSugarRepository<SysMenu>>().AsQueryable() return await _sysRoleRep.ChangeRepository<SqlSugarRepository<SysMenu>>().AsQueryable()
.Where(u => u.Type == MenuTypeEnum.Btn)
.WhereIF(menuIds != null && menuIds.Count > 0, u => menuIds.Contains(u.Id)) .WhereIF(menuIds != null && menuIds.Count > 0, u => menuIds.Contains(u.Id))
.WhereIF(!isAll, u => u.Status == StatusEnum.Enable)
.Where(u => u.Type == MenuTypeEnum.Btn)
.Select(u => u.Permission).ToListAsync(); .Select(u => u.Permission).ToListAsync();
} }