using Admin.NET.Core;
using Microsoft.AspNetCore.Http;
namespace Admin.NET.Plugin.AiDOP.Infrastructure;
///
/// 从 HTTP 请求(显式参数 / JWT / query tenantId)解析 TenantId;均无有效值时回退框架默认租户。
///
public static class AidopTenantHelper
{
public static long GetTenantId(HttpContext? ctx) => Resolve(ctx);
///
/// 解析租户:requestTenantId > JWT Claim > query tenantId > DefaultTenantId。
///
public static long Resolve(HttpContext? ctx, long? requestTenantId = null)
{
if (requestTenantId is > 0)
return requestTenantId.Value;
var claim = ctx?.User?.FindFirst(ClaimConst.TenantId)?.Value;
if (!string.IsNullOrWhiteSpace(claim) && long.TryParse(claim, out var tid) && tid > 0)
return tid;
if (TryParseTenantId(ctx?.Request.Query["tenantId"].ToString(), out var queryTid))
return queryTid;
return SqlSugarConst.DefaultTenantId;
}
private static bool TryParseTenantId(string? raw, out long tenantId)
{
tenantId = 0;
return !string.IsNullOrWhiteSpace(raw) && long.TryParse(raw.Trim(), out tenantId) && tenantId > 0;
}
}