JwtClaimTenantResolveContributor.cs 1.09 KB
using FoodLabeling.Application.Helpers;
using Microsoft.AspNetCore.Http;
using Volo.Abp.MultiTenancy;

namespace FoodLabeling.Application.MultiTenancy;

/// <summary>
/// 从 JWT Claim TenantId 解析当前租户(泰额版登录写入)
/// </summary>
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)
            ?.HttpContext;
        if (httpContext is null)
        {
            return Task.CompletedTask;
        }

        var tenantClaim = TenantBusinessContextHelper.TryGetTenantIdClaimValue(httpContext);
        if (!string.IsNullOrWhiteSpace(tenantClaim)
            && Guid.TryParse(tenantClaim, out var tenantGuid)
            && tenantGuid != Guid.Empty)
        {
            context.TenantIdOrName = tenantClaim;
        }

        return Task.CompletedTask;
    }
}