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

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

@ -292,7 +292,7 @@ public class SysAuthService : IDynamicApiController, ITransient
// 角色集合
var roleIds = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysUserRole>>().AsQueryable().Where(u => u.UserId == user.Id).Select(u => u.RoleId).ToListAsync();
// 接口集合
var apis = (await App.GetRequiredService<SysRoleService>().GetUserApiList())[0];
var apis = (await App.GetRequiredService<SysRoleService>().GetUserApiList())[0];
// 个性化水印文字(若系统水印为空则不显示)
var watermarkText = await _sysUserRep.ChangeRepository<SqlSugarRepository<SysTenant>>().AsQueryable().Where(u => u.Id == user.TenantId).Select(u => u.Watermark).FirstAsync();
if (!string.IsNullOrWhiteSpace(watermarkText))

View File

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