diff --git a/Aspnet/Aspnet.sln b/Aspnet/Aspnet.sln deleted file mode 100644 index baec485..0000000 --- a/Aspnet/Aspnet.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.002.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AlquilaFacil", "AlquilaFacil.csproj", "{76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76BA8B31-BAD3-49CD-B8B8-BE22D8AEA281}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {CF93AFAC-32EF-4993-84A2-CA2EB32F58FF} - EndGlobalSection -EndGlobal diff --git a/Aspnet/Controllers/AccionesController.cs b/Aspnet/Controllers/AccionesController.cs index 4772e51..9be95b8 100644 --- a/Aspnet/Controllers/AccionesController.cs +++ b/Aspnet/Controllers/AccionesController.cs @@ -1,24 +1,40 @@ +using System.ComponentModel.DataAnnotations; using Entidades.Dto; using Microsoft.AspNetCore.Mvc; using Modelo; +using System.Text.Json; + namespace AlquilaFacil.Controllers; [ApiController] public class AccionesController: ControllerBase { - //Reutilizo el loginDto pero no lleno el campo de contraseña - [HttpPost("api/acciones")] - public IActionResult ListarAccionesPorUsuario([FromBody] LoginDto email, [FromHeader(Name = "Auth")] string Auth) { - if (email.Email == "" || email.Email == null) return BadRequest(); + [HttpGet("api/acciones")] + public IActionResult ListarAccionesPorUsuario([FromHeader(Name ="Email")] string Email, [FromHeader(Name = "Auth")] string Auth) { + if (Email == "" || Email == null) return BadRequest(); if (Auth == "") return Unauthorized(new { esValido = false}); - bool esValido = RepositorioUsuarios.Singleton.CheckToken(email.Email, Auth); + bool esValido = RepositorioUsuarios.Singleton.CheckToken(Email, Auth); if (!esValido) return Unauthorized(); - var Permisos = RepositorioPermisos.Singleton.ListarPermisos(email.Email); + var Permisos = RepositorioPermisos.Singleton.ListarPermisos(Email); Response.Headers["Content-Type"] = "application/json"; return Ok(Permisos); } + + [HttpPost("api/acciones/grupo")] + public IActionResult ListarAccionesPorGrupo([FromHeader(Name = "Auth")] string Auth, + [FromBody] AccionesPorGrupoDto req) { + if (string.IsNullOrEmpty(Auth)) return BadRequest(); + bool esValido = RepositorioUsuarios.Singleton.CheckToken(req.Email, Auth); + if (esValido == false) return BadRequest(esValido); + + bool tieneGrupo = RepositorioUsuarios.Singleton.CheckGrupo(req.Email, req.Grupo); + if (tieneGrupo == false) return Unauthorized(); + + var permisos = RepositorioGrupos.Singleton.ListarPermisosDeGrupo(req.Grupo); + return Ok(permisos); + } } \ No newline at end of file diff --git a/Aspnet/Controllers/GruposController.cs b/Aspnet/Controllers/GruposController.cs index 31f8ffa..be028f2 100644 --- a/Aspnet/Controllers/GruposController.cs +++ b/Aspnet/Controllers/GruposController.cs @@ -16,11 +16,6 @@ public class GruposController: ControllerBase { bool ret = RepositorioGrupos.Singleton.CrearGrupo(grupo.descripcion); return (ret) ? Ok(ret) : BadRequest(); } - - [HttpGet("api/admin/grupos")] - public IActionResult ListarGrupo(){ - return Ok(RepositorioGrupos.Singleton.Listar()); - } } public record AdminGrupo(string descripcion); diff --git a/Entidades/Dto/AccionesDeGrupo.cs b/Entidades/Dto/AccionesDeGrupo.cs new file mode 100644 index 0000000..a3e4b29 --- /dev/null +++ b/Entidades/Dto/AccionesDeGrupo.cs @@ -0,0 +1,2 @@ +namespace Entidades.Dto; +public record AccionesPorGrupoDto(string Email, string Grupo); \ No newline at end of file diff --git a/Entidades/Grupo.cs b/Entidades/Grupo.cs index 8a1a624..420bc05 100644 --- a/Entidades/Grupo.cs +++ b/Entidades/Grupo.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text.Json.Serialization; namespace Entidades; @@ -9,6 +10,7 @@ public partial class Grupo public string Nombre { get; set; } = null!; + [JsonIgnore] public virtual ICollection Idclientes { get; set; } = new List(); public virtual ICollection Idpermisos { get; set; } = new List(); diff --git a/Front/index.html b/Front/index.html index 9df6701..135b7b8 100644 --- a/Front/index.html +++ b/Front/index.html @@ -2,7 +2,7 @@ - + diff --git a/Front/public/favicon.png b/Front/public/favicon.png deleted file mode 100644 index bc2d027..0000000 Binary files a/Front/public/favicon.png and /dev/null differ diff --git a/Front/public/favicon.svg b/Front/public/favicon.svg new file mode 100644 index 0000000..fbd876d --- /dev/null +++ b/Front/public/favicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Front/src/App.svelte b/Front/src/App.svelte index 2f9e3d0..95c0f96 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -1,25 +1,38 @@ - + + - - + + + + + @@ -29,5 +42,19 @@ + + + + + + + + + + + + + + diff --git a/Front/src/lib/BarraHorizontalConTexto.svelte b/Front/src/Componentes/BarraHorizontalConTexto.svelte similarity index 100% rename from Front/src/lib/BarraHorizontalConTexto.svelte rename to Front/src/Componentes/BarraHorizontalConTexto.svelte diff --git a/Front/src/lib/FormPostCli.svelte b/Front/src/Componentes/FormPostCli.svelte similarity index 100% rename from Front/src/lib/FormPostCli.svelte rename to Front/src/Componentes/FormPostCli.svelte diff --git a/Front/src/Componentes/ListaAcciones.svelte b/Front/src/Componentes/ListaAcciones.svelte new file mode 100644 index 0000000..d93319e --- /dev/null +++ b/Front/src/Componentes/ListaAcciones.svelte @@ -0,0 +1,48 @@ + + +
+ {#each $permisos as item} + + {item.descripcion} + + {/each} +
\ No newline at end of file diff --git a/Front/src/lib/NavBarAutocompletable.svelte b/Front/src/Componentes/NavBarAutocompletable.svelte similarity index 53% rename from Front/src/lib/NavBarAutocompletable.svelte rename to Front/src/Componentes/NavBarAutocompletable.svelte index f5b0cb8..ad8a925 100644 --- a/Front/src/lib/NavBarAutocompletable.svelte +++ b/Front/src/Componentes/NavBarAutocompletable.svelte @@ -2,28 +2,33 @@ import { Navbar, NavbarBrand, NavbarToggler, NavItem, Nav, NavLink, Collapse } from "@sveltestrap/sveltestrap"; import { onMount } from "svelte"; import { writable } from 'svelte/store'; - + import './css/popup.css'; let isOpen: boolean = $state(false); - interface Permiso { + type Permiso = { id: number; descripcion: string; - } + }; - const permisos = writable([]); + type Grupo = { + id: number; + nombre: string; + idpermisos: Permiso[]; + }; + + const permisos = writable([]); const email = localStorage.getItem('email'); const token = sessionStorage.getItem('token'); - async function obtenerPermisos(){ try { const response = await fetch("http://localhost:5007/api/acciones",{ - method: 'POST', + method: 'GET', headers: { 'Auth' : String(token), + 'Email' : String(email), 'Content-Type' : "application/json" }, - body: JSON.stringify({email}) }); if (response.ok){ const json = await response.json(); @@ -36,17 +41,21 @@ } } - $inspect(permisos); onMount( () => { obtenerPermisos(); }) + + function redirijir(path: string){ + location.replace(path); + } + AlquilaFacil -
+
Volver al Menú @@ -55,9 +64,20 @@ diff --git a/Front/src/lib/NavBarLogin.svelte b/Front/src/Componentes/NavBarLogin.svelte similarity index 100% rename from Front/src/lib/NavBarLogin.svelte rename to Front/src/Componentes/NavBarLogin.svelte diff --git a/Front/src/lib/RutaProtegida.svelte b/Front/src/Componentes/RutaProtegida.svelte similarity index 100% rename from Front/src/lib/RutaProtegida.svelte rename to Front/src/Componentes/RutaProtegida.svelte diff --git a/Front/src/Componentes/css/popup.css b/Front/src/Componentes/css/popup.css new file mode 100644 index 0000000..0fcdcf2 --- /dev/null +++ b/Front/src/Componentes/css/popup.css @@ -0,0 +1,38 @@ +@keyframes rollDown { + from { + opacity: 0; + transform: rotateX(-90deg); + transform-origin: top; + } + to { + opacity: 1; + transform: rotateX(0deg); + } +} + +@keyframes rollUp { + from { + opacity: 1; + transform: rotateX(0deg); + } + to { + opacity: 0; + transform: rotateX(-90deg); + } +} + +.dropdown-menu { + display: none; + animation: none; + transform-origin: top; +} + +.dropdown-menu.show { + animation: rollDown 0.5s ease forwards; + display: block; +} + +.dropdown-menu.hide { + animation: rollUp 0.5s ease forwards; + display: block; +} \ No newline at end of file diff --git a/Front/src/lib/login.svelte b/Front/src/Componentes/login.svelte similarity index 100% rename from Front/src/lib/login.svelte rename to Front/src/Componentes/login.svelte diff --git a/Front/src/Menu/page.svelte b/Front/src/Menu/page.svelte deleted file mode 100644 index 63a5edc..0000000 --- a/Front/src/Menu/page.svelte +++ /dev/null @@ -1,6 +0,0 @@ - - - -hol \ No newline at end of file diff --git a/Front/src/login/loginPage.svelte b/Front/src/login/loginPage.svelte deleted file mode 100644 index 56e4174..0000000 --- a/Front/src/login/loginPage.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - -
-
- -
diff --git a/Front/src/paginas/PublicarPropiedad.svelte b/Front/src/paginas/PublicarPropiedad.svelte new file mode 100644 index 0000000..512d5f5 --- /dev/null +++ b/Front/src/paginas/PublicarPropiedad.svelte @@ -0,0 +1,91 @@ + + + +
+

Registrar Propiedad

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ +
+
diff --git a/Front/src/paginas/grupos/AdminG.svelte b/Front/src/paginas/grupos/AdminG.svelte new file mode 100644 index 0000000..1ed9d36 --- /dev/null +++ b/Front/src/paginas/grupos/AdminG.svelte @@ -0,0 +1,14 @@ + + + +
+
+

Perfil del Administrador

+

Gestiona las cuentas de usuarios, propiedades y permisos desde aquí.

+
+ +
\ No newline at end of file diff --git a/Front/src/paginas/grupos/EstadisticaG.svelte b/Front/src/paginas/grupos/EstadisticaG.svelte new file mode 100644 index 0000000..5e17d5c --- /dev/null +++ b/Front/src/paginas/grupos/EstadisticaG.svelte @@ -0,0 +1,5 @@ + + + diff --git a/Front/src/paginas/grupos/InquilinoG.svelte b/Front/src/paginas/grupos/InquilinoG.svelte new file mode 100644 index 0000000..039f6a3 --- /dev/null +++ b/Front/src/paginas/grupos/InquilinoG.svelte @@ -0,0 +1,14 @@ + + + + +
+
+

Perfil del Inquilino

+

Gestiona tus Pagos y Busca Propiedades desde aquí.

+
+ +
\ No newline at end of file diff --git a/Front/src/paginas/grupos/PropietarioG.svelte b/Front/src/paginas/grupos/PropietarioG.svelte new file mode 100644 index 0000000..84284d6 --- /dev/null +++ b/Front/src/paginas/grupos/PropietarioG.svelte @@ -0,0 +1,13 @@ + + + +
+
+

Perfil del Propietario

+

Gestiona tus propiedades y servicios desde aquí.

+
+ +
\ No newline at end of file diff --git a/Front/src/Info/page.svelte b/Front/src/paginas/info.svelte similarity index 83% rename from Front/src/Info/page.svelte rename to Front/src/paginas/info.svelte index 2a58b37..c28bfa8 100644 --- a/Front/src/Info/page.svelte +++ b/Front/src/paginas/info.svelte @@ -1,6 +1,6 @@
diff --git a/Front/src/Inquilino/page.svelte b/Front/src/paginas/inquilino.svelte similarity index 84% rename from Front/src/Inquilino/page.svelte rename to Front/src/paginas/inquilino.svelte index 3913b1f..0da3a45 100644 --- a/Front/src/Inquilino/page.svelte +++ b/Front/src/paginas/inquilino.svelte @@ -1,7 +1,7 @@ diff --git a/Front/src/paginas/login.svelte b/Front/src/paginas/login.svelte new file mode 100644 index 0000000..ea3823f --- /dev/null +++ b/Front/src/paginas/login.svelte @@ -0,0 +1,10 @@ + + + +
+
+ +
diff --git a/Front/src/paginas/menu.svelte b/Front/src/paginas/menu.svelte new file mode 100644 index 0000000..06a8931 --- /dev/null +++ b/Front/src/paginas/menu.svelte @@ -0,0 +1,6 @@ + + + +hol \ No newline at end of file diff --git a/Front/src/Propiedades/page.svelte b/Front/src/paginas/propiedades.svelte similarity index 100% rename from Front/src/Propiedades/page.svelte rename to Front/src/paginas/propiedades.svelte diff --git a/Front/src/Propietario/page.svelte b/Front/src/paginas/propietario.svelte similarity index 84% rename from Front/src/Propietario/page.svelte rename to Front/src/paginas/propietario.svelte index 56e26a6..447c6d1 100644 --- a/Front/src/Propietario/page.svelte +++ b/Front/src/paginas/propietario.svelte @@ -1,7 +1,7 @@ diff --git a/Modelo/RepositorioGrupos.cs b/Modelo/RepositorioGrupos.cs index 129eadd..c8bef71 100644 --- a/Modelo/RepositorioGrupos.cs +++ b/Modelo/RepositorioGrupos.cs @@ -19,9 +19,9 @@ public class RepositorioGrupos: RepositorioBase { return Guardar(con); } - public object? Listar() - { - return Context.Grupos.Include(x => x.Idpermisos); + public IQueryable ListarPermisosDeGrupo(string grupo) { + var con = Context; + return con.Grupos.Where(x=>x.Nombre == grupo).SelectMany(x => x.Idpermisos); } } diff --git a/Modelo/RepositorioPermisos.cs b/Modelo/RepositorioPermisos.cs index 06b51a1..e53fb40 100644 --- a/Modelo/RepositorioPermisos.cs +++ b/Modelo/RepositorioPermisos.cs @@ -4,7 +4,7 @@ using Microsoft.EntityFrameworkCore; namespace Modelo; public class RepositorioPermisos: RepositorioBase { - public IQueryable? ListarPermisos(string email) { + public object? ListarPermisos(string email) { var con = Context; Cliente? cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(c => c.Email == email); if (cli == null) return null; @@ -12,8 +12,8 @@ public class RepositorioPermisos: RepositorioBase { var list = con.Clientes .Where(c => c.Dni == cli.Dni) .SelectMany(c => c.Idgrupos) - .SelectMany(g => g.Idpermisos) - .Distinct(); + .Include(x=> x.Idpermisos); + return list; } diff --git a/Modelo/RepositorioPropiedades.cs b/Modelo/RepositorioPropiedades.cs index ea3f720..cab5cdb 100644 --- a/Modelo/RepositorioPropiedades.cs +++ b/Modelo/RepositorioPropiedades.cs @@ -1,5 +1,6 @@ using System; using System.Reflection.Metadata.Ecma335; +using System.Runtime.ConstrainedExecution; using Entidades; using Entidades.Dto; using Microsoft.EntityFrameworkCore; @@ -76,7 +77,8 @@ public class RepositorioPropiedades: RepositorioBase public bool BajaPropiedad(int id) { var con = Context; - Propiedade prop = con.Propiedades.Find(id); + Propiedade? prop = con.Propiedades.Find(id); + if (prop == null) return false; prop.Idestado = 3; return Guardar(con); diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index 9ec7cd3..ae724a8 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -2,7 +2,8 @@ using System.Security.Cryptography; using System.Text; using Entidades.Dto; using Entidades; - +using Microsoft.EntityFrameworkCore; + namespace Modelo; public class RepositorioUsuarios: RepositorioBase { @@ -102,5 +103,20 @@ public class RepositorioUsuarios: RepositorioBase { Guardar(con); } + public bool CheckGrupo(string email, string grupo) { + var con = Context; + var usu = con.Clientes.Include(x=>x.Idgrupos).FirstOrDefault(x=>x.Email == email); + bool ret = false; + if (usu != null && usu.Idgrupos != null) { + Parallel.ForEach(usu.Idgrupos, (idGrupo, state) => { + if (idGrupo.Nombre == grupo) { + ret = true; + state.Break(); + } + }); + } + + return ret; + } }