Files
pfm/PostFundManagement.Infrastructure/Database/Services/TenantContextService.cs
T
2026-10-20 12:47:06 +02:00

35 lines
1.2 KiB
C#

using PostFundManagement.Domain.Abstractions;
namespace PostFundManagement.Infrastructure.Database.Services;
public sealed class TenantContextService : ITenantContextService
{
public string? TenantName { get; }
public long TenantId { get; }
public bool ByPassTenantQueryFilter { get; set; } = false;
public bool IsAdmin { get; }
public bool HasTenantFilter { get; }
public TenantContextService(IHttpContextAccessor httpContextAccessor)
{
var user = httpContextAccessor.HttpContext?.User;
var tenantIdClaimVal = user?.FindFirst("tenant_id")?.Value ?? user?.FindFirst("TenantId")?.Value;
TenantId = long.TryParse(tenantIdClaimVal, out var id) ? id : 0L;
var tenantNameClaimVal = user?.FindFirst("tenant")?.Value ?? user?.FindFirst("Tenant")?.Value;
TenantName = !string.IsNullOrWhiteSpace(tenantNameClaimVal) ? tenantNameClaimVal : null;
IsAdmin = (user?.IsInRole("Admin") == true || user?.HasClaim("role", "Admin") == true) && TenantId == 1;
ByPassTenantQueryFilter = user?.IsInRole("Partner") == true || user?.HasClaim("role", "Partner") == true;
ByPassTenantQueryFilter = ByPassTenantQueryFilter || IsAdmin;
HasTenantFilter = !IsAdmin;
}
}