94 lines
2.8 KiB
C#
94 lines
2.8 KiB
C#
using System.Text.RegularExpressions;
|
|
using Entidades;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Modelo;
|
|
public class RepositorioPermisos : RepositorioBase<RepositorioPermisos>
|
|
{
|
|
public IQueryable<Grupo>? 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)
|
|
.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 grupos = con.Clientes
|
|
.Where(x => x.Dni == cli.Dni)
|
|
.SelectMany(x => x.Idgrupos)
|
|
.Include(x => x.Idpermisos)
|
|
.Include(x => x.IdGrupoHijos)
|
|
.ThenInclude(x => x.Idpermisos)
|
|
.ToList();
|
|
|
|
foreach (var grupo in grupos)
|
|
{
|
|
var visitados = new HashSet<int>();
|
|
var todosLosPermisos = new HashSet<Permiso>();
|
|
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);
|
|
|
|
}
|
|
}
|