using Microsoft.AspNetCore.Http; using Volo.Abp.MultiTenancy; using Volo.Abp.Security.Claims; using Yi.Framework.Rbac.Domain.Shared.Consts; namespace FoodLabeling.Application.MultiTenancy; /// /// 从 JWT Claim 解析当前租户(泰额版登录写入) /// public class JwtClaimTenantResolveContributor : TenantResolveContributorBase { public const string ContributorName = "JwtClaim"; public override string Name => ContributorName; public override Task ResolveAsync(ITenantResolveContext context) { var httpContext = context.ServiceProvider.GetService(typeof(IHttpContextAccessor)) as IHttpContextAccessor; var user = httpContext?.HttpContext?.User; if (user?.Identity?.IsAuthenticated != true) { return Task.CompletedTask; } var tenantClaim = user.FindFirst(TokenTypeConst.TenantId)?.Value ?? user.FindFirst(AbpClaimTypes.TenantId)?.Value; if (!string.IsNullOrWhiteSpace(tenantClaim)) { context.TenantIdOrName = tenantClaim; } return Task.CompletedTask; } }