feat: 新增租户管理端 TenantApi 并移除旧 API

This commit is contained in:
root
2026-01-29 11:39:57 +00:00
parent 17dc73c61d
commit 86ef0d6033
60 changed files with 450 additions and 1368 deletions

View File

@@ -90,7 +90,14 @@ public sealed class TenantResolutionMiddleware(
{
var request = context.Request;
// 1. Header 中的租户 ID
// 1. Token Claim已认证请求必须以 Claim 为准,避免 Header 覆盖导致跨租户访问)
var claim = context.User?.FindFirst("tenant_id");
if (claim != null && long.TryParse(claim.Value, out var claimTenant))
{
return new TenantContext(claimTenant, null, "claim:tenant_id");
}
// 2. Header 中的租户 ID
if (!string.IsNullOrWhiteSpace(options.TenantIdHeaderName) &&
request.Headers.TryGetValue(options.TenantIdHeaderName, out var tenantHeader) &&
long.TryParse(tenantHeader.FirstOrDefault(), out var headerTenantId))
@@ -98,7 +105,7 @@ public sealed class TenantResolutionMiddleware(
return new TenantContext(headerTenantId, null, $"header:{options.TenantIdHeaderName}");
}
// 2. Header 中的租户编码
// 3. Header 中的租户编码
if (!string.IsNullOrWhiteSpace(options.TenantCodeHeaderName) &&
request.Headers.TryGetValue(options.TenantCodeHeaderName, out var codeHeader))
{
@@ -109,7 +116,7 @@ public sealed class TenantResolutionMiddleware(
}
}
// 3. Host 映射/子域名解析
// 4. Host 映射/子域名解析
var host = request.Host.Host;
if (!string.IsNullOrWhiteSpace(host))
{
@@ -125,13 +132,6 @@ public sealed class TenantResolutionMiddleware(
}
}
// 4. Token Claim
var claim = context.User?.FindFirst("tenant_id");
if (claim != null && long.TryParse(claim.Value, out var claimTenant))
{
return new TenantContext(claimTenant, null, "claim:tenant_id");
}
return TenantContext.Empty;
}