Organization_Management #142

Merged
ashutosh.nehete merged 92 commits from Organization_Management into main 2025-09-30 09:05:14 +00:00
3 changed files with 12 additions and 5 deletions
Showing only changes of commit 31da8a4402 - Show all commits

View File

@ -37,6 +37,7 @@ namespace MarcoBMS.Services.Helpers
// --- Step 1: Define the subquery using the main thread's context --- // --- Step 1: Define the subquery using the main thread's context ---
// This is safe because the query is not executed yet. // This is safe because the query is not executed yet.
var employeeRoleIdsQuery = _context.EmployeeRoleMappings var employeeRoleIdsQuery = _context.EmployeeRoleMappings
.AsNoTracking()
.Where(erm => erm.EmployeeId == EmployeeId && erm.IsEnabled) .Where(erm => erm.EmployeeId == EmployeeId && erm.IsEnabled)
.Select(erm => erm.RoleId); .Select(erm => erm.RoleId);
@ -50,6 +51,7 @@ namespace MarcoBMS.Services.Helpers
// Now, re-create and execute the query using this new, isolated context. // Now, re-create and execute the query using this new, isolated context.
var roleIds = await contextForCache.EmployeeRoleMappings var roleIds = await contextForCache.EmployeeRoleMappings
.AsNoTracking()
.Where(erm => erm.EmployeeId == EmployeeId && erm.IsEnabled) .Where(erm => erm.EmployeeId == EmployeeId && erm.IsEnabled)
.Select(erm => erm.RoleId) .Select(erm => erm.RoleId)
.ToListAsync(); .ToListAsync();
@ -73,9 +75,12 @@ namespace MarcoBMS.Services.Helpers
var roleIds = await employeeRoleIdsQuery.ToListAsync(); var roleIds = await employeeRoleIdsQuery.ToListAsync();
var permissionIds = await _context.RolePermissionMappings var permissionIds = await _context.RolePermissionMappings
.AsNoTracking()
.Where(rp => roleIds.Contains(rp.ApplicationRoleId)).Select(rp => rp.FeaturePermissionId).ToListAsync(); .Where(rp => roleIds.Contains(rp.ApplicationRoleId)).Select(rp => rp.FeaturePermissionId).ToListAsync();
var permissions = await _context.FeaturePermissions.Include(f => f.Feature) var permissions = await _context.FeaturePermissions
.AsNoTracking()
.Include(f => f.Feature)
.Where(fp => permissionIds.Contains(fp.Id)) .Where(fp => permissionIds.Contains(fp.Id))
.Distinct() .Distinct()
.ToListAsync(); .ToListAsync();

View File

@ -36,7 +36,7 @@ namespace MarcoBMS.Services.Helpers
var tenantId = _httpContextAccessor.HttpContext?.User.FindFirst("TenantId")?.Value; var tenantId = _httpContextAccessor.HttpContext?.User.FindFirst("TenantId")?.Value;
if (tenantId != null) if (tenantId != null)
{ {
return await _context.Tenants.FirstOrDefaultAsync(t => t.Id == Guid.Parse(tenantId)); return await _context.Tenants.AsNoTracking().FirstOrDefaultAsync(t => t.Id == Guid.Parse(tenantId));
} }
return null; return null;
} }
@ -54,7 +54,7 @@ namespace MarcoBMS.Services.Helpers
{ {
var user = await GetCurrentUserAsync(); var user = await GetCurrentUserAsync();
if (user == null) return new Employee { }; if (user == null) return new Employee { };
var Employee = await _context.Employees.Include(e => e.JobRole).FirstOrDefaultAsync(e => e.ApplicationUserId == user.Id && e.IsActive); var Employee = await _context.Employees.AsNoTracking().Include(e => e.JobRole).FirstOrDefaultAsync(e => e.ApplicationUserId == user.Id && e.IsActive);
return Employee ?? new Employee { }; return Employee ?? new Employee { };
} }

View File

@ -79,6 +79,7 @@ namespace Marco.Pms.Services.Service
{ {
// Fetch permissions explicitly assigned to this employee in the project. // Fetch permissions explicitly assigned to this employee in the project.
var projectLevelPermissionIds = await _context.ProjectLevelPermissionMappings var projectLevelPermissionIds = await _context.ProjectLevelPermissionMappings
.AsNoTracking()
.Where(pl => pl.ProjectId == projectId.Value && pl.EmployeeId == employeeId) .Where(pl => pl.ProjectId == projectId.Value && pl.EmployeeId == employeeId)
.Select(pl => pl.PermissionId) .Select(pl => pl.PermissionId)
.ToListAsync(); .ToListAsync();
@ -97,6 +98,7 @@ namespace Marco.Pms.Services.Service
// Get all feature permissions under those modules where the user didn't have explicit project-level grants. // Get all feature permissions under those modules where the user didn't have explicit project-level grants.
var allOverriddenPermissions = await _context.FeaturePermissions var allOverriddenPermissions = await _context.FeaturePermissions
.AsNoTracking()
.Where(fp => projectLevelModuleIds.Contains(fp.FeatureId) && .Where(fp => projectLevelModuleIds.Contains(fp.FeatureId) &&
!projectLevelPermissionIds.Contains(fp.Id)) !projectLevelPermissionIds.Contains(fp.Id))
.Select(fp => fp.Id) .Select(fp => fp.Id)
@ -138,12 +140,12 @@ namespace Marco.Pms.Services.Service
var hasPermission = await HasPermission(PermissionsMaster.ManageProject, employeeId); var hasPermission = await HasPermission(PermissionsMaster.ManageProject, employeeId);
if (hasPermission) if (hasPermission)
{ {
var projects = await _context.Projects.Where(c => c.TenantId == LoggedInEmployee.TenantId).ToListAsync(); var projects = await _context.Projects.AsNoTracking().Where(c => c.TenantId == LoggedInEmployee.TenantId).ToListAsync();
projectIds = projects.Select(p => p.Id).ToList(); projectIds = projects.Select(p => p.Id).ToList();
} }
else else
{ {
var allocation = await _context.ProjectAllocations.Where(c => c.EmployeeId == employeeId && c.IsActive).ToListAsync(); var allocation = await _context.ProjectAllocations.AsNoTracking().Where(c => c.EmployeeId == employeeId && c.IsActive).ToListAsync();
if (!allocation.Any()) if (!allocation.Any())
{ {
return false; return false;