refactor: 移除菜单平台根租户读取
This commit is contained in:
@@ -10,30 +10,52 @@ namespace TakeoutSaaS.Infrastructure.Identity.Repositories;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class EfMenuRepository(IdentityDbContext dbContext) : IMenuRepository
|
public sealed class EfMenuRepository(IdentityDbContext dbContext) : IMenuRepository
|
||||||
{
|
{
|
||||||
private const long PlatformRootTenantId = 1000000000001;
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <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()
|
.AsNoTracking()
|
||||||
.IgnoreQueryFilters()
|
.Where(x => x.TenantId == tenantId)
|
||||||
.Where(x => x.TenantId == PlatformRootTenantId && x.DeletedAt == null)
|
|
||||||
.OrderBy(x => x.ParentId)
|
.OrderBy(x => x.ParentId)
|
||||||
.ThenBy(x => x.SortOrder)
|
.ThenBy(x => x.SortOrder)
|
||||||
.ToListAsync(cancellationToken)
|
.ToListAsync(cancellationToken);
|
||||||
.ContinueWith(t => (IReadOnlyList<MenuDefinition>)t.Result, 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 />
|
/// <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()
|
.AsNoTracking()
|
||||||
.IgnoreQueryFilters()
|
.IgnoreQueryFilters()
|
||||||
.FirstOrDefaultAsync(
|
.FirstOrDefaultAsync(x => x.Id == id && x.TenantId == 0 && x.DeletedAt == null, cancellationToken);
|
||||||
x => x.Id == id && x.TenantId == PlatformRootTenantId && x.DeletedAt == null,
|
|
||||||
cancellationToken);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|||||||
Reference in New Issue
Block a user