Files
AlquilaFacil/Modelo/RepositorioPermisos.cs
2025-04-25 16:23:10 -03:00

88 lines
2.6 KiB
C#

using System.Text.RegularExpressions;
using Entidades;
using Microsoft.EntityFrameworkCore;
namespace Modelo;
public class RepositorioPermisos : RepositorioBase<RepositorioPermisos>
{
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;
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)
.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;
}
public List<Permiso> ListarPermisos()
{
return Context.Permisos.ToList();
}
public bool CheckPermisos(string token, int idpermiso)
{
//WIP Aca tengo que modificar esto para que haga una busqueda de profundidad para los permisos
//
var con = Context;
bool tienePermiso = false;
Cliente? cli = con.Clientes.FirstOrDefault(x => x.Token == token);
if (cli == null || cli.Dni == 0) return false;
var permisos = con.Clientes
.Where(x => x.Dni == cli.Dni)
.SelectMany(x => x.Idgrupos)
.SelectMany(x => x.Idpermisos)
.Distinct();
Parallel.ForEach(permisos, (x, i) =>
{
if (x.Id == idpermiso)
{
tienePermiso = true;
}
});
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);
}
}