Chnaged the logic check if tenant and organization have any relation

This commit is contained in:
ashutosh.nehete 2025-09-21 15:37:55 +05:30
parent a1f6552347
commit 264c9466c9

View File

@ -1360,10 +1360,28 @@ namespace MarcoBMS.Services.Controllers
} }
// Find TenantOrgMapping for given tenantId and organizationId to validate access // Find TenantOrgMapping for given tenantId and organizationId to validate access
var tenantOrganization = await _context.TenantOrgMappings var tenantOrganizationTask = Task.Run(async () =>
{
await using var context = await _dbContextFactory.CreateDbContextAsync();
return await context.TenantOrgMappings
.FirstOrDefaultAsync(to => to.TenantId == tenantId && to.OrganizationId == organizationId); .FirstOrDefaultAsync(to => to.TenantId == tenantId && to.OrganizationId == organizationId);
if (tenantOrganization == null) });
var primaryOrganizationTask = Task.Run(async () =>
{
await using var context = await _dbContextFactory.CreateDbContextAsync();
return await context.Tenants
.Where(t => t.Id == tenantId && t.OrganizationId == organizationId).ToListAsync();
});
await Task.WhenAll(tenantOrganizationTask, primaryOrganizationTask);
var tenantOrganization = tenantOrganizationTask.Result;
var primaryOrganization = primaryOrganizationTask.Result;
if (tenantOrganization == null && !primaryOrganization.Any())
{ {
_logger.LogWarning("Tenant Organization Mapping not found for TenantId: {TenantId} and OrganizationId: {OrganizationId}", tenantId, organizationId); _logger.LogWarning("Tenant Organization Mapping not found for TenantId: {TenantId} and OrganizationId: {OrganizationId}", tenantId, organizationId);
return NotFound(ApiResponse<object>.ErrorResponse("Tenant Organization Mapping not found", "Tenant Organization Mapping not found in database", 404)); return NotFound(ApiResponse<object>.ErrorResponse("Tenant Organization Mapping not found", "Tenant Organization Mapping not found in database", 404));
@ -1378,10 +1396,10 @@ namespace MarcoBMS.Services.Controllers
} }
// Generate JWT token scoped to selected tenant and logged-in employee // Generate JWT token scoped to selected tenant and logged-in employee
var token = _refreshTokenService.GenerateJwtToken(loggedInEmployee.Email, tenantOrganization.TenantId, loggedInEmployee.OrganizationId, _jwtSettings); var token = _refreshTokenService.GenerateJwtToken(loggedInEmployee.Email, tenantId, loggedInEmployee.OrganizationId, _jwtSettings);
// Generate and store refresh token // Generate and store refresh token
var refreshToken = await _refreshTokenService.CreateRefreshToken(loggedInEmployee.ApplicationUserId, tenantOrganization.TenantId.ToString(), loggedInEmployee.OrganizationId, _jwtSettings); var refreshToken = await _refreshTokenService.CreateRefreshToken(loggedInEmployee.ApplicationUserId, tenantId.ToString(), loggedInEmployee.OrganizationId, _jwtSettings);
_logger.LogInfo("Tenant selected and tokens generated for TenantId: {TenantId} and Employee: {EmployeeEmail}", tenantId, loggedInEmployee.Email ?? string.Empty); _logger.LogInfo("Tenant selected and tokens generated for TenantId: {TenantId} and Employee: {EmployeeEmail}", tenantId, loggedInEmployee.Email ?? string.Empty);