This commit is contained in:
马梓彭 2026-06-23 22:18:53 +08:00
parent e3273251d6
commit 3cbe8d5b48

View File

@ -358,9 +358,16 @@ public class SysMenuService : BaseService<SysMenu>, ITransient
public async Task<bool> CheckPermission(string code)
{
if (_authManager.IsSuperAdmin) return true;
var cache = await GetAuthButtonCodeList(_authManager.UserId);
var output = cache.FirstOrDefault(x => string.Equals(x.Code, code, StringComparison.CurrentCultureIgnoreCase));
return output?.Access ?? false;
// 兼容历史接口:未配置权限码的接口仅要求已登录,不做菜单权限拦截
var hasConfiguredPermission = await _sysMenuRepository.IsAnyAsync(x => x.Code == code);
if (!hasConfiguredPermission)
{
return true;
}
var authCodes = await GetAuthPermissionCodeList(_authManager.UserId);
return authCodes.Any(x => string.Equals(x, code, StringComparison.CurrentCultureIgnoreCase));
}
/// <summary>
@ -404,6 +411,34 @@ public class SysMenuService : BaseService<SysMenu>, ITransient
return cache.Value;
}
[NonAction]
private async Task<List<string>> GetAuthPermissionCodeList(long userId)
{
var cacheKey = $"{CacheConst.PermissionKey}code.v2.{userId}";
var cache = await _easyCachingProvider.GetAsync(cacheKey, async () =>
{
var list = await _sysMenuRepository.AsSugarClient()
.Queryable<SysUserRole>()
.InnerJoin<SysRole>((userRole, role) => userRole.RoleId == role.Id)
.InnerJoin<SysRoleMenu>((userRole, role, roleMenu) => role.Id == roleMenu.RoleId)
.InnerJoin<SysMenu>((userRole, role, roleMenu, menu) => roleMenu.MenuId == menu.Id)
.Where((userRole, role, roleMenu, menu) =>
userRole.UserId == userId &&
role.Status == AvailabilityStatus.Enable &&
menu.Status == AvailabilityStatus.Enable &&
!string.IsNullOrEmpty(menu.Code))
.Select((userRole, role, roleMenu, menu) => menu.Code)
.ToListAsync();
return list
.Where(x => !string.IsNullOrWhiteSpace(x))
.Distinct()
.ToList();
}, TimeSpan.FromDays(1));
return cache.Value ?? new List<string>();
}
/// <summary>
/// 移除菜单中的按钮
/// </summary>