using System.Text.RegularExpressions; using Entidades; using Microsoft.EntityFrameworkCore; namespace Modelo; public class RepositorioPermisos : RepositorioBase { public IQueryable? ListarPermisos(string email) { var con = Context; Cliente? cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(c => c.Email == email); if (cli == null) return null; // Obtener todos los grupos del cliente var list = con.Clientes .Where(c => c.Dni == cli.Dni) .SelectMany(c => c.Idgrupos) .Where(x => x.Habilitado == true) .Include(x => x.Idpermisos) .Include(x => x.IdGrupoHijos).ThenInclude(x => x.Idpermisos); // Cargamos todos los subgrupos de forma recursiva foreach (var grupo in list) { var visitados = new HashSet(); var todosLosPermisos = new HashSet(); grupo.ObtenerPermisos(todosLosPermisos, visitados); grupo.Idpermisos = todosLosPermisos.ToList(); } return list; } public List ListarPermisos() { return Context.Permisos.ToList(); } public bool CheckPermisos(string token, int idpermiso) { var con = Context; bool tienePermiso = false; Cliente? cli = con.Clientes.FirstOrDefault(x => x.Token == token); if (cli == null || cli.Dni == 0) return false; var grupos = con.Clientes .Where(x => x.Dni == cli.Dni) .SelectMany(x => x.Idgrupos) .Where(x => x.Habilitado == true) .Include(x => x.Idpermisos) .Include(x => x.IdGrupoHijos) .ThenInclude(x => x.Idpermisos) .ToList(); foreach (var grupo in grupos) { var visitados = new HashSet(); var todosLosPermisos = new HashSet(); grupo.ObtenerPermisos(todosLosPermisos, visitados); if (todosLosPermisos.Any(p => p.Id == idpermiso)) { tienePermiso = true; break; } } return tienePermiso; } public bool CrearPermiso(Permiso per, Cliente cli) { var con = Context; per.Id = con.Permisos.Any() ? con.Permisos.Max(x => x.Id) + 1 : 1; con.Permisos.Add(per); GenerarLog(con, cli.Dni, $"Creado Permiso {per.Descripcion}"); return Guardar(con); } public bool PatchPermiso(Permiso per, Cliente cli) { var con = Context; var perm = con.Permisos.FirstOrDefault(x => x.Id == per.Id); if (perm == null) return false; perm.Descripcion = per.Descripcion; GenerarLog(con, cli.Dni, $"Editado Permiso {per.Id}"); return Guardar(con); } }