line-gestao-api/Services/TenantProvider.cs

31 lines
885 B
C#

using System.Security.Claims;
using Microsoft.AspNetCore.Http;
namespace line_gestao_api.Services;
public class TenantProvider : ITenantProvider
{
private readonly IHttpContextAccessor _httpContextAccessor;
private static readonly AsyncLocal<Guid?> CurrentTenant = new();
public TenantProvider(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public Guid? TenantId => CurrentTenant.Value ?? ResolveFromClaims();
public void SetTenantId(Guid? tenantId)
{
CurrentTenant.Value = tenantId;
}
private Guid? ResolveFromClaims()
{
var claim = _httpContextAccessor.HttpContext?.User?.FindFirst("tenantId")?.Value
?? _httpContextAccessor.HttpContext?.User?.FindFirst("tenant")?.Value;
return Guid.TryParse(claim, out var tenantId) ? tenantId : null;
}
}