35 lines
1.2 KiB
C#
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;
|
|
}
|
|
}
|