ahora lista usando profundidad
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user