refactor: 移除菜单平台根租户读取

This commit is contained in:
root
2026-01-29 13:47:32 +00:00
parent f42213951f
commit 1ee9aa8435

View File

@@ -10,30 +10,52 @@ namespace TakeoutSaaS.Infrastructure.Identity.Repositories;
/// </summary>
public sealed class EfMenuRepository(IdentityDbContext dbContext) : IMenuRepository
{
private const long PlatformRootTenantId = 1000000000001;
/// <inheritdoc />
public Task<IReadOnlyList<MenuDefinition>> GetByTenantAsync(long tenantId, CancellationToken cancellationToken = default)
public async Task<IReadOnlyList<MenuDefinition>> GetByTenantAsync(long tenantId, CancellationToken cancellationToken = default)
{
return dbContext.MenuDefinitions
// 1. 优先返回租户自定义菜单
var tenantMenus = await dbContext.MenuDefinitions
.AsNoTracking()
.IgnoreQueryFilters()
.Where(x => x.TenantId == PlatformRootTenantId && x.DeletedAt == null)
.Where(x => x.TenantId == tenantId)
.OrderBy(x => x.ParentId)
.ThenBy(x => x.SortOrder)
.ToListAsync(cancellationToken)
.ContinueWith(t => (IReadOnlyList<MenuDefinition>)t.Result, cancellationToken);
.ToListAsync(cancellationToken);
if (tenantMenus.Count > 0)
{
return tenantMenus;
}
// 2. (空行后) 回退系统默认菜单TenantId=0
var systemMenus = await dbContext.MenuDefinitions
.AsNoTracking()
.IgnoreQueryFilters()
.Where(x => x.TenantId == 0 && x.DeletedAt == null)
.OrderBy(x => x.ParentId)
.ThenBy(x => x.SortOrder)
.ToListAsync(cancellationToken);
return systemMenus;
}
/// <inheritdoc />
public Task<MenuDefinition?> FindByIdAsync(long id, long tenantId, CancellationToken cancellationToken = default)
public async Task<MenuDefinition?> FindByIdAsync(long id, long tenantId, CancellationToken cancellationToken = default)
{
return dbContext.MenuDefinitions
// 1. 优先查租户菜单
var tenantMenu = await dbContext.MenuDefinitions
.AsNoTracking()
.FirstOrDefaultAsync(
x => x.Id == id && x.TenantId == tenantId,
cancellationToken);
if (tenantMenu != null)
{
return tenantMenu;
}
// 2. (空行后) 回退查系统默认菜单TenantId=0
return await dbContext.MenuDefinitions
.AsNoTracking()
.IgnoreQueryFilters()
.FirstOrDefaultAsync(
x => x.Id == id && x.TenantId == PlatformRootTenantId && x.DeletedAt == null,
cancellationToken);
.FirstOrDefaultAsync(x => x.Id == id && x.TenantId == 0 && x.DeletedAt == null, cancellationToken);
}
/// <inheritdoc />