diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/Identity/Repositories/EfMenuRepository.cs b/src/Infrastructure/TakeoutSaaS.Infrastructure/Identity/Repositories/EfMenuRepository.cs
index 97167ef..fcacf21 100644
--- a/src/Infrastructure/TakeoutSaaS.Infrastructure/Identity/Repositories/EfMenuRepository.cs
+++ b/src/Infrastructure/TakeoutSaaS.Infrastructure/Identity/Repositories/EfMenuRepository.cs
@@ -10,30 +10,52 @@ namespace TakeoutSaaS.Infrastructure.Identity.Repositories;
///
public sealed class EfMenuRepository(IdentityDbContext dbContext) : IMenuRepository
{
- private const long PlatformRootTenantId = 1000000000001;
-
///
- public Task> GetByTenantAsync(long tenantId, CancellationToken cancellationToken = default)
+ public async Task> 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)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;
}
///
- public Task FindByIdAsync(long id, long tenantId, CancellationToken cancellationToken = default)
+ public async Task 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);
}
///