using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.Employees; using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Projects; 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; public PermissionServices(ApplicationDbContext context, RolesHelper rolesHelper, ProjectsHelper projectsHelper) { _context = context; _rolesHelper = rolesHelper; _projectsHelper = projectsHelper; } public async Task HasPermission(Guid featurePermissionId, Guid employeeId) { var hasPermission = await _context.EmployeeRoleMappings .Where(er => er.EmployeeId == employeeId) .Select(er => er.RoleId) .Distinct() .AnyAsync(roleId => _context.RolePermissionMappings .Any(rp => rp.FeaturePermissionId == featurePermissionId && rp.ApplicationRoleId == roleId)); 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; } } }