31 lines
885 B
C#
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;
|
|
}
|
|
}
|