。
This commit is contained in:
parent
e3273251d6
commit
3cbe8d5b48
@ -358,9 +358,16 @@ public class SysMenuService : BaseService<SysMenu>, ITransient
|
|||||||
public async Task<bool> CheckPermission(string code)
|
public async Task<bool> CheckPermission(string code)
|
||||||
{
|
{
|
||||||
if (_authManager.IsSuperAdmin) return true;
|
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>
|
/// <summary>
|
||||||
@ -404,6 +411,34 @@ public class SysMenuService : BaseService<SysMenu>, ITransient
|
|||||||
return cache.Value;
|
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>
|
||||||
/// 移除菜单中的按钮
|
/// 移除菜单中的按钮
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user