Assigning the appilcation role to root employee of the any organization
This commit is contained in:
parent
c07db9f94d
commit
1939a63d9a
@ -9,6 +9,7 @@ using Marco.Pms.Model.ViewModels.Activities;
|
|||||||
using Marco.Pms.Model.ViewModels.Master;
|
using Marco.Pms.Model.ViewModels.Master;
|
||||||
using Marco.Pms.Model.ViewModels.Organization;
|
using Marco.Pms.Model.ViewModels.Organization;
|
||||||
using Marco.Pms.Model.ViewModels.Projects;
|
using Marco.Pms.Model.ViewModels.Projects;
|
||||||
|
using Marco.Pms.Services.Helpers;
|
||||||
using Marco.Pms.Services.Service;
|
using Marco.Pms.Services.Service;
|
||||||
using MarcoBMS.Services.Helpers;
|
using MarcoBMS.Services.Helpers;
|
||||||
using MarcoBMS.Services.Service;
|
using MarcoBMS.Services.Service;
|
||||||
@ -30,6 +31,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
private readonly UserHelper _userHelper;
|
private readonly UserHelper _userHelper;
|
||||||
private readonly Guid tenantId;
|
private readonly Guid tenantId;
|
||||||
private readonly IMapper _mapper;
|
private readonly IMapper _mapper;
|
||||||
|
private readonly Guid loggedOrganizationId;
|
||||||
private readonly ILoggingService _logger;
|
private readonly ILoggingService _logger;
|
||||||
|
|
||||||
private static readonly Guid PMCProvider = Guid.Parse("b1877a3b-8832-47b1-bbe3-dc7e98672f49");
|
private static readonly Guid PMCProvider = Guid.Parse("b1877a3b-8832-47b1-bbe3-dc7e98672f49");
|
||||||
@ -47,6 +49,7 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
_userHelper = userHelper ?? throw new ArgumentNullException(nameof(userHelper));
|
_userHelper = userHelper ?? throw new ArgumentNullException(nameof(userHelper));
|
||||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||||
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
|
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
|
||||||
|
loggedOrganizationId = _userHelper.GetCurrentOrganizationId();
|
||||||
tenantId = userHelper.GetTenantId();
|
tenantId = userHelper.GetTenantId();
|
||||||
}
|
}
|
||||||
#region =================================================================== Get Functions ===================================================================
|
#region =================================================================== Get Functions ===================================================================
|
||||||
@ -669,6 +672,8 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
Service = _mapper.Map<ServiceMasterVM>(s)
|
Service = _mapper.Map<ServiceMasterVM>(s)
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
|
await AssignApplicationRoleToOrganization(organization.Id, project.TenantId);
|
||||||
|
|
||||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Organization successfully assigned to the project", 200));
|
return Ok(ApiResponse<object>.SuccessResponse(response, "Organization successfully assigned to the project", 200));
|
||||||
}
|
}
|
||||||
catch (DbUpdateException dbEx)
|
catch (DbUpdateException dbEx)
|
||||||
@ -745,6 +750,8 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
// Prepare response view model
|
// Prepare response view model
|
||||||
var response = _mapper.Map<BasicOrganizationVm>(organization);
|
var response = _mapper.Map<BasicOrganizationVm>(organization);
|
||||||
|
|
||||||
|
await AssignApplicationRoleToOrganization(organization.Id, tenantId);
|
||||||
|
|
||||||
return Ok(ApiResponse<object>.SuccessResponse(response, "Organization has been assigned to tenant", 200));
|
return Ok(ApiResponse<object>.SuccessResponse(response, "Organization has been assigned to tenant", 200));
|
||||||
}
|
}
|
||||||
catch (DbUpdateException dbEx)
|
catch (DbUpdateException dbEx)
|
||||||
@ -938,45 +945,98 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Helper Functions ===================================================================
|
#region =================================================================== Helper Functions ===================================================================
|
||||||
//private ServicesProviderFilter? TryDeserializeServicesProviderFilter(string? filter)
|
|
||||||
//{
|
|
||||||
// if (string.IsNullOrWhiteSpace(filter))
|
|
||||||
// {
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
|
private async Task AssignApplicationRoleToOrganization(Guid organizationId, Guid tenantId)
|
||||||
// ServicesProviderFilter? documentFilter = null;
|
{
|
||||||
|
if (loggedOrganizationId == organizationId)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await using var _context = await _dbContextFactory.CreateDbContextAsync();
|
||||||
|
using var scope = _serviceScope.CreateScope();
|
||||||
|
|
||||||
// try
|
var rootEmployee = await _context.Employees
|
||||||
// {
|
.Include(e => e.ApplicationUser)
|
||||||
// // First, try to deserialize directly. This is the expected case (e.g., from a web client).
|
.FirstOrDefaultAsync(e => e.ApplicationUser != null && e.ApplicationUser.IsRootUser.HasValue && e.ApplicationUser.IsRootUser.Value && e.OrganizationId == organizationId && e.IsPrimary);
|
||||||
// documentFilter = JsonSerializer.Deserialize<ServicesProviderFilter>(filter, options);
|
if (rootEmployee == null)
|
||||||
// }
|
{
|
||||||
// catch (JsonException ex)
|
return;
|
||||||
// {
|
}
|
||||||
// _logger.LogError(ex, "[{MethodName}] Failed to directly deserialize filter. Attempting to unescape and re-parse. Filter: {Filter}", nameof(TryDeserializeServicesProviderFilter), filter);
|
string serviceProviderRoleName = "Service Provider Role";
|
||||||
|
|
||||||
// // If direct deserialization fails, it might be an escaped string (common with tools like Postman or some mobile clients).
|
var serviceProviderRole = await _context.ApplicationRoles.FirstOrDefaultAsync(ar => ar.Role == serviceProviderRoleName && ar.TenantId == tenantId);
|
||||||
// try
|
if (serviceProviderRole == null)
|
||||||
// {
|
{
|
||||||
// // Unescape the string first, then deserialize the result.
|
serviceProviderRole = new Model.Roles.ApplicationRole
|
||||||
// string unescapedJsonString = JsonSerializer.Deserialize<string>(filter, options) ?? "";
|
{
|
||||||
// if (!string.IsNullOrWhiteSpace(unescapedJsonString))
|
Id = Guid.NewGuid(),
|
||||||
// {
|
Role = serviceProviderRoleName,
|
||||||
// documentFilter = JsonSerializer.Deserialize<ServicesProviderFilter>(unescapedJsonString, options);
|
Description = serviceProviderRoleName,
|
||||||
// }
|
IsSystem = true,
|
||||||
// }
|
TenantId = tenantId
|
||||||
// catch (JsonException ex1)
|
};
|
||||||
// {
|
_context.ApplicationRoles.Add(serviceProviderRole);
|
||||||
// // If both attempts fail, log the final error and return null.
|
|
||||||
// _logger.LogError(ex1, "[{MethodName}] All attempts to deserialize the filter failed. Filter will be ignored. Filter: {Filter}", nameof(TryDeserializeServicesProviderFilter), filter);
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return documentFilter;
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
var rolePermissionMappigs = new List<RolePermissionMappings> {
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.ViewProject
|
||||||
|
},
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.ViewProjectInfra
|
||||||
|
},
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.ViewTask
|
||||||
|
},
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.ViewAllEmployees
|
||||||
|
},
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.TeamAttendance
|
||||||
|
},
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.AssignRoles
|
||||||
|
},
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.ManageProjectInfra
|
||||||
|
},
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.AssignAndReportProgress
|
||||||
|
},
|
||||||
|
new RolePermissionMappings
|
||||||
|
{
|
||||||
|
ApplicationRoleId = serviceProviderRole.Id,
|
||||||
|
FeaturePermissionId = PermissionsMaster.AddAndEditTask
|
||||||
|
}
|
||||||
|
};
|
||||||
|
_context.RolePermissionMappings.AddRange(rolePermissionMappigs);
|
||||||
|
}
|
||||||
|
_context.EmployeeRoleMappings.Add(new EmployeeRoleMapping
|
||||||
|
{
|
||||||
|
EmployeeId = rootEmployee.Id,
|
||||||
|
RoleId = serviceProviderRole.Id,
|
||||||
|
IsEnabled = true,
|
||||||
|
TenantId = tenantId
|
||||||
|
});
|
||||||
|
|
||||||
|
var _cache = scope.ServiceProvider.GetRequiredService<CacheUpdateHelper>();
|
||||||
|
await _cache.ClearAllPermissionIdsByEmployeeID(rootEmployee.Id, tenantId);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user