From b2f45baec789b35ac24dec6153d41e15986cffa2 Mon Sep 17 00:00:00 2001 From: fede Date: Fri, 25 Apr 2025 16:23:10 -0300 Subject: [PATCH] ahora lista usando profundidad --- Modelo/RepositorioGrupos.cs | 14 +++++++++++++- Modelo/RepositorioPermisos.cs | 19 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Modelo/RepositorioGrupos.cs b/Modelo/RepositorioGrupos.cs index 5d1ceb5..2f8018f 100644 --- a/Modelo/RepositorioGrupos.cs +++ b/Modelo/RepositorioGrupos.cs @@ -68,10 +68,22 @@ public class RepositorioGrupos : RepositorioBase var grupos = con.Grupos.Include(x => x.IdGrupoHijos).ThenInclude(x => x.Idpermisos).Include(x => x.Idpermisos); return grupos; } + public IQueryable ListarPermisosDeGrupo(string grupo) { var con = Context; //WIP Revisar esto. revisado necesito hacer una pagina de grupo default y que los permisos resuelvan los de subgrupos - return con.Grupos.Where(x => x.Nombre == grupo).SelectMany(x => x.Idpermisos); + var listg = con.Grupos + .Include(x => x.Idpermisos) + .Include(x => x.IdGrupoHijos) + .ThenInclude(x => x.Idpermisos).ToList(); + var g = listg.FirstOrDefault(x => x.Nombre == grupo); + if (g == null) return Enumerable.Empty().AsQueryable(); + + var permisos = new HashSet(); + var visitados = new HashSet(); + g.ObtenerPermisos(permisos, visitados); + + return permisos.AsQueryable(); } public IQueryable ObtenerGruposPorDni(long Dni) diff --git a/Modelo/RepositorioPermisos.cs b/Modelo/RepositorioPermisos.cs index 1b91a0c..8d44cec 100644 --- a/Modelo/RepositorioPermisos.cs +++ b/Modelo/RepositorioPermisos.cs @@ -7,14 +7,27 @@ public class RepositorioPermisos : RepositorioBase { public IQueryable? ListarPermisos(string email) { + //WIP Aca tengo que modificar esto para que haga una busqueda de profundidad para los permisos 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) - .Include(x => x.Idpermisos); + .Where(c => c.Dni == cli.Dni) + .SelectMany(c => c.Idgrupos) + .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; }