From 99591b8cc26f8d7501079b4d88a5820204d890af Mon Sep 17 00:00:00 2001 From: fede Date: Fri, 25 Apr 2025 19:46:18 -0300 Subject: [PATCH] bueno ya esta implemntado todo lo de permisos de forma recursiva --- Aspnet/Controllers/LogsController.cs | 38 +++++++++++++++---------- Front/src/paginas/GestionPemisos.svelte | 3 -- Modelo/RepositorioPermisos.cs | 20 ++++++++----- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/Aspnet/Controllers/LogsController.cs b/Aspnet/Controllers/LogsController.cs index c232bd1..1f074bd 100644 --- a/Aspnet/Controllers/LogsController.cs +++ b/Aspnet/Controllers/LogsController.cs @@ -5,21 +5,25 @@ using Modelo; namespace AlquilaFacil.Controllers; [ApiController] -public class LogsController: ControllerBase { +public class LogsController : ControllerBase +{ [HttpGet("/api/Logs")] - public IActionResult ObtenerLogs([FromHeader(Name = "Auth")] string Auth, int pag=1) { + public IActionResult ObtenerLogs([FromHeader(Name = "Auth")] string Auth, int pag = 1) + { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Informes"); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 7); if (validacion1 == false) return Unauthorized(); - if (pag<=0) return BadRequest(new { message = "no puede haber una pagina 0 o menor"}); + if (pag <= 0) return BadRequest(new { message = "no puede haber una pagina 0 o menor" }); - pag-=1; + pag -= 1; var l = RepositorioLogs.Singleton.ObtenerLogsPaginado(pag); List ll = new(); - foreach (var i in l) { - ll.Add(new LogDto{ + foreach (var i in l) + { + ll.Add(new LogDto + { Fecha = i.Fecha, Accion = i.Accion, Dniusuario = i.Dniusuario, @@ -29,16 +33,19 @@ public class LogsController: ControllerBase { } [HttpGet("/api/Logs/detalle")] - public IActionResult ObtenerLogs([FromHeader(Name = "Auth")] string Auth, [FromQuery]DateTime fecha, [FromQuery]long idusuario) { + public IActionResult ObtenerLogs([FromHeader(Name = "Auth")] string Auth, [FromQuery] DateTime fecha, [FromQuery] long idusuario) + { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Informes"); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 7); if (validacion1 == false) return Unauthorized(); - if (idusuario<=0) return BadRequest(new { message = "no puede haber un id 0 o menor"}); + if (idusuario <= 0) return BadRequest(new { message = "no puede haber un id 0 o menor" }); var l = RepositorioLogs.Singleton.ObtenerDetallesLogs(fecha, idusuario); List ll = new(); - foreach (var i in l) { - ll.Add(new LogDetalleDto{ + foreach (var i in l) + { + ll.Add(new LogDetalleDto + { Fecha = i.Fecha, Dniusuario = i.Dniusuario, NombreTabla = i.NombreTabla, @@ -51,12 +58,13 @@ public class LogsController: ControllerBase { } [HttpGet("/api/Logs/cantPag")] - public IActionResult cantidadPaginas([FromHeader(Name = "Auth")] string Auth){ + public IActionResult cantidadPaginas([FromHeader(Name = "Auth")] string Auth) + { if (String.IsNullOrEmpty(Auth)) return Unauthorized(); - var validacion1 = RepositorioGrupos.Singleton.CheckGrupos(Auth, "Informes"); + var validacion1 = RepositorioPermisos.Singleton.CheckPermisos(Auth, 7); if (validacion1 == false) return Unauthorized(); int c = RepositorioLogs.Singleton.ObtenerCantidadPaginas(); return Ok(c); } -} \ No newline at end of file +} diff --git a/Front/src/paginas/GestionPemisos.svelte b/Front/src/paginas/GestionPemisos.svelte index 5d636d7..ffa58ee 100644 --- a/Front/src/paginas/GestionPemisos.svelte +++ b/Front/src/paginas/GestionPemisos.svelte @@ -7,9 +7,6 @@ import BarraHorizontalConTexto from "../Componentes/BarraHorizontalConTexto.svelte"; import BotonEsquina from "../Componentes/BotonEsquina.svelte"; import ModalEditarPermiso from "../Componentes/ModalEditarPermiso.svelte"; - import Login from "./login.svelte"; - import { Modal } from "@sveltestrap/sveltestrap"; - import ModalLogs from "../Componentes/ModalLogs.svelte"; const token: string = sessionStorage.getItem("token") || ""; diff --git a/Modelo/RepositorioPermisos.cs b/Modelo/RepositorioPermisos.cs index 8d44cec..f8ab3cd 100644 --- a/Modelo/RepositorioPermisos.cs +++ b/Modelo/RepositorioPermisos.cs @@ -7,7 +7,6 @@ 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; @@ -47,19 +46,26 @@ public class RepositorioPermisos : RepositorioBase Cliente? cli = con.Clientes.FirstOrDefault(x => x.Token == token); if (cli == null || cli.Dni == 0) return false; - var permisos = con.Clientes + var grupos = con.Clientes .Where(x => x.Dni == cli.Dni) .SelectMany(x => x.Idgrupos) - .SelectMany(x => x.Idpermisos) - .Distinct(); + .Include(x => x.Idpermisos) + .Include(x => x.IdGrupoHijos) + .ThenInclude(x => x.Idpermisos) + .ToList(); - Parallel.ForEach(permisos, (x, i) => + foreach (var grupo in grupos) { - if (x.Id == idpermiso) + var visitados = new HashSet(); + var todosLosPermisos = new HashSet(); + grupo.ObtenerPermisos(todosLosPermisos, visitados); + + if (todosLosPermisos.Any(p => p.Id == idpermiso)) { tienePermiso = true; + break; } - }); + } return tienePermiso; }