using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.Employees; using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Projects; using Marco.Pms.Services.Helpers; using MarcoBMS.Services.Helpers; using Microsoft.EntityFrameworkCore; namespace Marco.Pms.Services.Service { public class PermissionServices { private readonly ApplicationDbContext _context; private readonly RolesHelper _rolesHelper; private readonly ProjectsHelper _projectsHelper; private readonly CacheUpdateHelper _cache; public PermissionServices(ApplicationDbContext context, RolesHelper rolesHelper, ProjectsHelper projectsHelper, CacheUpdateHelper cache) { _context = context; _rolesHelper = rolesHelper; _projectsHelper = projectsHelper; _cache = cache; } public async Task HasPermission(Guid featurePermissionId, Guid employeeId) { var featurePermissionIds = await _cache.GetPermissions(employeeId); if (featurePermissionIds == null) { List featurePermission = await _rolesHelper.GetFeaturePermissionByEmployeeID(employeeId); featurePermissionIds = featurePermission.Select(fp => fp.Id).ToList(); } var hasPermission = featurePermissionIds.Contains(featurePermissionId); return hasPermission; } public async Task HasProjectPermission(Employee emp, string projectId) { List featurePermission = await _rolesHelper.GetFeaturePermissionByEmployeeID(emp.Id); string[] projectsId = []; /* User with permission manage project can see all projects */ if (featurePermission != null && featurePermission.Exists(c => c.Id.ToString() == "172fc9b6-755b-4f62-ab26-55c34a330614")) { List projects = await _projectsHelper.GetAllProjectByTanentID(emp.TenantId); projectsId = projects.Select(c => c.Id.ToString()).ToArray(); } else { List allocation = await _projectsHelper.GetProjectByEmployeeID(emp.Id); projectsId = allocation.Select(c => c.ProjectId.ToString()).ToArray(); } bool response = projectsId.Contains(projectId); return response; } } }