ahora lista usando profundidad

This commit is contained in:
2025-04-25 16:23:10 -03:00
parent 190f9a8e10
commit b2f45baec7
2 changed files with 29 additions and 4 deletions

View File

@@ -68,10 +68,22 @@ public class RepositorioGrupos : RepositorioBase<RepositorioGrupos>
var grupos = con.Grupos.Include(x => x.IdGrupoHijos).ThenInclude(x => x.Idpermisos).Include(x => x.Idpermisos); var grupos = con.Grupos.Include(x => x.IdGrupoHijos).ThenInclude(x => x.Idpermisos).Include(x => x.Idpermisos);
return grupos; return grupos;
} }
public IQueryable<Permiso> ListarPermisosDeGrupo(string grupo) public IQueryable<Permiso> 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 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<Permiso>().AsQueryable();
var permisos = new HashSet<Permiso>();
var visitados = new HashSet<int>();
g.ObtenerPermisos(permisos, visitados);
return permisos.AsQueryable();
} }
public IQueryable<GrupoAdmin> ObtenerGruposPorDni(long Dni) public IQueryable<GrupoAdmin> ObtenerGruposPorDni(long Dni)

View File

@@ -7,14 +7,27 @@ public class RepositorioPermisos : RepositorioBase<RepositorioPermisos>
{ {
public IQueryable<Grupo>? ListarPermisos(string email) public IQueryable<Grupo>? ListarPermisos(string email)
{ {
//WIP Aca tengo que modificar esto para que haga una busqueda de profundidad para los permisos
var con = Context; var con = Context;
Cliente? cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(c => c.Email == email); Cliente? cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(c => c.Email == email);
if (cli == null) return null; if (cli == null) return null;
// Obtener todos los grupos del cliente
var list = con.Clientes var list = con.Clientes
.Where(c => c.Dni == cli.Dni) .Where(c => c.Dni == cli.Dni)
.SelectMany(c => c.Idgrupos) .SelectMany(c => c.Idgrupos)
.Include(x => x.Idpermisos); .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<int>();
var todosLosPermisos = new HashSet<Permiso>();
grupo.ObtenerPermisos(todosLosPermisos, visitados);
grupo.Idpermisos = todosLosPermisos.ToList();
}
return list; return list;
} }