Cambios por el userstate

This commit is contained in:
2026-03-26 09:06:39 +01:00
parent 370c8e85b4
commit f019c95456
26 changed files with 439 additions and 268 deletions

View File

@@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18 # Visual Studio Version 17
VisualStudioVersion = 18.1.11312.151 d18.0 VisualStudioVersion = 17.14.36915.13 d17.14
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HerramientaCASA", "HerramientaCASA\HerramientaCASA.csproj", "{60B569DA-FC18-45B9-8ACC-8E29D8C2EA2C}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HerramientaCASA", "HerramientaCASA\HerramientaCASA.csproj", "{60B569DA-FC18-45B9-8ACC-8E29D8C2EA2C}"
EndProject EndProject

View File

@@ -9,6 +9,7 @@
@inject UserState userState @inject UserState userState
@inject IJSRuntime JS @inject IJSRuntime JS
@using bdHerramientaCACOA.db @using bdHerramientaCACOA.db
@using static HerramientaCASA.Components.Layout.LoginLayout
@inject UserState UserState @inject UserState UserState
@@ -144,24 +145,46 @@
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (!firstRender)
{ return;
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer"); var result = await ProtectedLocalStore.GetAsync<UserSessionData>("userSession");
if (!UserState.PuedeAcceder)
if (result.Success && result.Value is not null)
{ {
rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri); UserState.idUser = result.Value.idUser;
if (!UtilidadesCASA.UrlPermitida(urlAnterior, bd)) UserState.EsAdmin = result.Value.EsAdmin;
UserState.PuedeAcceder = result.Value.PuedeAcceder;
UserState.RedireccionValida = result.Value.RedireccionValida;
}
else
{ {
Navigation.NavigateTo("/Denegado", true); UserState.idUser = 0;
UserState.EsAdmin = false;
UserState.PuedeAcceder = false;
UserState.RedireccionValida = false;
} }
else if (userState.idUser == 0)
UserState.EstaCargado = true;
if (userState?.RedireccionValida == false)
{ {
Navigation.NavigateTo("/", true); Navigation.NavigateTo("/");
return;
} }
else
if (userState?.idUser == 0)
{
Navigation.NavigateTo("/Login");
return;
} }
else
if (userState?.EsAdmin == false)
{
Navigation.NavigateTo("/Login");
return;
}
StateHasChanged(); StateHasChanged();
} }
}
} }

View File

@@ -1,6 +1,7 @@
@inherits LayoutComponentBase @inherits LayoutComponentBase
@using BlazorBootstrap; @using BlazorBootstrap;
@using HerramientaCASA.Model @using HerramientaCASA.Model
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web
@inject UserState UserState @inject UserState UserState
@inject IHttpContextAccessor HttpContextAccessor @inject IHttpContextAccessor HttpContextAccessor
@@ -8,7 +9,7 @@
@inject IJSRuntime JS @inject IJSRuntime JS
@using bdHerramientaCACOA.db @using bdHerramientaCACOA.db
@inject UserState UserState @inject UserState UserState
@inject ProtectedLocalStorage ProtectedLocalStore
<head> <head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" /> <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet" />
@@ -42,27 +43,52 @@
@code{ @code{
string? urlAnterior = ""; // string? urlAnterior = "";
public tsHerramientasCACOA bd; // public tsHerramientasCACOA bd;
bool urlVaida = true; // bool urlVaida = true;
string rutaActual = ""; // string rutaActual = "";
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (!firstRender)
{ return;
urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer"); var result = await ProtectedLocalStore.GetAsync<UserSessionData>("userSession");
//urlAnterior = "https://www.cacoa.es";
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); if (result.Success && result.Value is not null)
if (!UtilidadesCASA.UrlPermitida(urlAnterior,bd))
{ {
Navigation.NavigateTo("/Denegado", true); UserState.idUser = result.Value.idUser;
UserState.EsAdmin = result.Value.EsAdmin;
UserState.PuedeAcceder = result.Value.PuedeAcceder;
UserState.RedireccionValida = result.Value.RedireccionValida;
} }
else
{
UserState.idUser = 0;
UserState.EsAdmin = false;
UserState.PuedeAcceder = false;
UserState.RedireccionValida = false;
}
UserState.EstaCargado = true;
if (UserState?.RedireccionValida == false)
{
Navigation.NavigateTo("/");
return;
}
StateHasChanged(); StateHasChanged();
} }
public class UserSessionData
{
public int idUser { get; set; }
public bool EsAdmin { get; set; }
public bool PuedeAcceder { get; set; }
public bool RedireccionValida { get; set; }
} }
} }

View File

@@ -9,6 +9,7 @@
@inject UserState userState @inject UserState userState
@inject IJSRuntime JS @inject IJSRuntime JS
@using bdHerramientaCACOA.db @using bdHerramientaCACOA.db
@using static HerramientaCASA.Components.Layout.LoginLayout
@inject UserState UserState @inject UserState UserState
@@ -93,7 +94,7 @@
<div class="ml-auto"> <div class="ml-auto">
<ul class="navbar-nav mr-auto ulMenu"> <ul class="navbar-nav mr-auto ulMenu">
<li class="nav-item"> <li class="nav-item">
<NavLink class="nav-link headNav" href="/"> <i class="fas fa-user-slash"></i><span class="miniHide">Cerrar Sesión</span></NavLink> <NavLink class="nav-link headNav" href="/Login"> <i class="fas fa-user-slash"></i><span class="miniHide">Cerrar Sesión</span></NavLink>
</li> </li>
</ul> </ul>
</div> </div>
@@ -130,27 +131,67 @@
private byte[] logoColegioArray = []; private byte[] logoColegioArray = [];
private string nombreColegio = ""; private string nombreColegio = "";
// protected override async Task OnAfterRenderAsync(bool firstRender)
// {
// if (firstRender)
// {
// bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
// if (!UserState.PuedeAcceder)
// {
// urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer");
// rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
// if (!UtilidadesCASA.UrlPermitida(urlAnterior, bd))
// {
// Navigation.NavigateTo("/Denegado");
// }
// else if (userState.idUser == 0)
// {
// Navigation.NavigateTo("/");
// }
// }
// StateHasChanged();
// }
// }
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (!firstRender)
return;
var result = await ProtectedLocalStore.GetAsync<UserSessionData>("userSession");
if (result.Success && result.Value is not null)
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); UserState.idUser = result.Value.idUser;
if (!UserState.PuedeAcceder) UserState.EsAdmin = result.Value.EsAdmin;
{ UserState.PuedeAcceder = result.Value.PuedeAcceder;
urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer"); UserState.RedireccionValida = result.Value.RedireccionValida;
rutaActual = Navigation.ToBaseRelativePath(Navigation.Uri);
if (!UtilidadesCASA.UrlPermitida(urlAnterior, bd))
{
Navigation.NavigateTo("/Denegado", true);
} }
else if (userState.idUser == 0) else
{ {
Navigation.NavigateTo("/", true); UserState.idUser = 0;
UserState.EsAdmin = false;
UserState.PuedeAcceder = false;
UserState.RedireccionValida = false;
} }
UserState.EstaCargado = true;
if (userState?.RedireccionValida == false)
{
Navigation.NavigateTo("/");
return;
} }
else
if (userState?.idUser == 0)
{
Navigation.NavigateTo("/Login");
return;
}
StateHasChanged(); StateHasChanged();
} }
}
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {

View File

@@ -465,7 +465,7 @@
Type = ToastType.Primary, Type = ToastType.Primary,
Message = $"Baja creada correctamente.", Message = $"Baja creada correctamente.",
}); });
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link);
} }
private void actualizarBaja(string jsonObjeto) private void actualizarBaja(string jsonObjeto)
{ {
@@ -488,7 +488,7 @@
var link = "/Bajas?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649); var link = "/Bajas?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link);
} }
public void RefreshState() public void RefreshState()
{ {

View File

@@ -81,9 +81,9 @@
private async void cargarListaSimulaciones() private async void cargarListaSimulaciones()
{ {
var idUser = await ProtectedLocalStore.GetAsync<int>("idUsuario"); var idUser = UserState.idUser;
listadoSimulaciones = bd.simulaciones.Include(x => x.idTipoSimulacionNavigation).Where(x => x.idCodigo == idUser.Value && (x.idTipoSimulacionNavigation.Codigo == "TIPOHERRAMIENTA.CASA" || x.idTipoSimulacionNavigation.Codigo == "TIPOHERRAMIENTA.URBAND") && x.idSimulacion != datosDespachoClonado.idSimulacion).ToList(); listadoSimulaciones = bd.simulaciones.Include(x => x.idTipoSimulacionNavigation).Where(x => x.idCodigo == idUser && (x.idTipoSimulacionNavigation.Codigo == "TIPOHERRAMIENTA.CASA" || x.idTipoSimulacionNavigation.Codigo == "TIPOHERRAMIENTA.URBAND") && x.idSimulacion != datosDespachoClonado.idSimulacion).ToList();
} }
public void RefreshState() public void RefreshState()

View File

@@ -0,0 +1,49 @@
@inherits LayoutComponentBase
@page "/"
@layout DenegadoLayout
@inject UserState UserState
@inject IJSRuntime JS
@inject NavigationManager Navigation
@using BlazorBootstrap;
@using HerramientaCASA.Model
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@using Microsoft.AspNetCore.Components.Web
@using static HerramientaCASA.Components.Layout.LoginLayout
@inject ProtectedLocalStorage pls
@rendermode InteractiveServer
<h3></h3>
@code {
string? urlAnterior = "";
public tsHerramientasCACOA bd;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
urlAnterior = await JS.InvokeAsync<string>("eval", "document.referrer");
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
if (!UtilidadesCASA.UrlPermitida(urlAnterior, bd))
{
Navigation.NavigateTo("/Denegado", false);
}
else
{
UserState.Limpiar();
UserState.RedireccionValida = true;
await GuardarSesion();
Navigation.NavigateTo("/Login", false);
}
//StateHasChanged();
}
private async Task GuardarSesion()
{
await pls.SetAsync("userSession", new UserSessionData
{
idUser = UserState.idUser,
EsAdmin = UserState.EsAdmin,
PuedeAcceder = UserState.PuedeAcceder,
RedireccionValida = UserState.RedireccionValida
});
}
}

View File

@@ -12,7 +12,7 @@
@inject ServicioPDF PdfService @inject ServicioPDF PdfService
@rendermode InteractiveServer @rendermode InteractiveServer
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject UserState userState
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" /> <Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="mensajes" Placement="ToastsPlacement.BottomCenter" />
<p class="TituloVentana"> <p class="TituloVentana">
@@ -183,8 +183,8 @@
nombreOriginal = casa.NombreSimulacion; nombreOriginal = casa.NombreSimulacion;
} }
var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario"); //var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario");
idUser = obtenerID.Value; idUser = userState.idUser;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -247,7 +247,7 @@
Message = $"Simulación creada correctamente.", Message = $"Simulación creada correctamente.",
}); });
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link, false);
return idSimulacionCreada; return idSimulacionCreada;
} }
@@ -273,7 +273,7 @@
var link = "/HerramientaCASAS?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649); var link = "/HerramientaCASAS?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link, false);
} }
public void RefreshState() public void RefreshState()

View File

@@ -10,6 +10,7 @@
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@inject IJSRuntime JS @inject IJSRuntime JS
@inject ServicioPDF PdfService @inject ServicioPDF PdfService
@inject UserState userState
@rendermode InteractiveServer @rendermode InteractiveServer
@@ -159,8 +160,8 @@
} }
var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario"); //var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario");
idUser = obtenerID.Value; idUser = userState.idUser;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -226,7 +227,7 @@
Message = $"Simulación creada correctamente.", Message = $"Simulación creada correctamente.",
}); });
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link, false);
return idSimulacionCreada; return idSimulacionCreada;
} }
@@ -251,7 +252,7 @@
var link = "/HerramientaURBAN?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649); var link = "/HerramientaURBAN?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link, false);
} }

View File

@@ -8,6 +8,7 @@
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@inject IJSRuntime JS @inject IJSRuntime JS
@inject ServicioPDF PdfService @inject ServicioPDF PdfService
@inject UserState userState
@page "/LicitacionCASA" @page "/LicitacionCASA"
@@ -284,8 +285,8 @@
nombreOriginal = objetoLicitaciones.Descripcion; nombreOriginal = objetoLicitaciones.Descripcion;
} }
var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario"); //var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario");
idUser = obtenerID.Value; idUser = userState.idUser;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -354,7 +355,7 @@
Type = ToastType.Primary, Type = ToastType.Primary,
Message = $"Licitación creada correctamente.", Message = $"Licitación creada correctamente.",
}); });
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link, false);
return idLicitacionCreada; return idLicitacionCreada;
} }
private void actualizarLicitacion(string jsonObjeto) private void actualizarLicitacion(string jsonObjeto)
@@ -379,7 +380,7 @@
var link = "/LicitacionCASA?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649); var link = "/LicitacionCASA?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link, false);
} }
public void RefreshState() public void RefreshState()

View File

@@ -9,6 +9,7 @@
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject IJSRuntime JS @inject IJSRuntime JS
@inject ServicioPDF PdfService @inject ServicioPDF PdfService
@inject UserState userState
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@@ -326,8 +327,8 @@
} }
var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario"); //var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario");
idUser = obtenerID.Value; idUser = userState.idUser;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -392,7 +393,7 @@
Message = $"Licitación creada correctamente.", Message = $"Licitación creada correctamente.",
}); });
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link, false);
return idSimulacionCreada; return idSimulacionCreada;
} }
private void actualizarSimulacion(string jsonObjeto) private void actualizarSimulacion(string jsonObjeto)
@@ -416,7 +417,7 @@
var link = "/LicitacionesUrban?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649); var link = "/LicitacionesUrban?idSimulador=" + tsUtilidades.crypt.FEncS(id.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
Navigation.NavigateTo(link, true); Navigation.NavigateTo(link, false);
} }
public async Task CalcularTabla(string idProvincia) public async Task CalcularTabla(string idProvincia)

View File

@@ -1,12 +1,14 @@
@page "/ClaveGenerada" @page "/ClaveGenerada"
@using HerramientaCASA.Components.Layout @using HerramientaCASA.Components.Layout
@using HerramientaCASA.Model
@using bdHerramientaCACOA.db @using bdHerramientaCACOA.db
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@rendermode InteractiveServer @rendermode InteractiveServer
@layout LoginLayout @layout DenegadoLayout
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@inject UserState UserState
<div class="back"> <div class="back">
@@ -34,17 +36,22 @@
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
logoColegioArray = bd.ficheros.Where(x => x.NombreFichero == "LogoColegio").Select(x => x.Fichero).First(); logoColegioArray = bd.ficheros.Where(x => x.NombreFichero == "LogoColegio").Select(x => x.Fichero).First();
var obtenerId = await ProtectedLocalStore.GetAsync<int>("idUsuario"); //var obtenerId = await ProtectedLocalStore.GetAsync<int>("idUsuario");
claveUsuario = obtenerId.Value; claveUsuario = UserState.idUser;
if (claveUsuario == 0 || claveUsuario == null) if (claveUsuario == 0 || claveUsuario == null)
{ {
Navigation.NavigateTo("/", forceLoad: true); Navigation.NavigateTo("/", forceLoad: true);
} else
{
UserState.idUser = claveUsuario.Value;
UserState.PuedeAcceder = true;
} }
} }
private async Task irPanelControl() private async Task irPanelControl()
{ {
Navigation.NavigateTo("/PanelControl", forceLoad: true); Navigation.NavigateTo("/PanelControl", forceLoad: false);
} }
} }

View File

@@ -28,6 +28,7 @@
<script src="Scripts/popper.min.js"></script> <script src="Scripts/popper.min.js"></script>
<script src="Scripts/all.min.js"></script> <script src="Scripts/all.min.js"></script>
<script src="Scripts/Util.js"></script> <script src="Scripts/Util.js"></script>
<title>Acceso Denegado</title>
</head> </head>
<div class="fondo"> <div class="fondo">
<div class="back"> <div class="back">
@@ -65,6 +66,8 @@
var datosURL = bd.enumeraciones.First(x => x.Codigo.Contains("CW.URLWEBCOLEGIO")); var datosURL = bd.enumeraciones.First(x => x.Codigo.Contains("CW.URLWEBCOLEGIO"));
urlWeb = datosURL.ValorAlfabetico1; urlWeb = datosURL.ValorAlfabetico1;
textoURL = datosURL.ValorAlfabetico2; textoURL = datosURL.ValorAlfabetico2;
UserState.Limpiar();
} }
} }

View File

@@ -1,15 +1,12 @@
@page "/" @page "/Login"
@using HerramientaCASA.Model @using HerramientaCASA.Model
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@using Microsoft.EntityFrameworkCore @using static HerramientaCASA.Components.Layout.LoginLayout
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@rendermode InteractiveServer @rendermode InteractiveServer
@layout LoginLayout @layout LoginLayout
@inject IHttpContextAccessor HttpContextAccessor
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject UserState UserState @inject UserState UserState
@inject IJSRuntime JS
<div class="fondo"> <div class="fondo">
<div class="back"> <div class="back">
@@ -17,7 +14,7 @@
<div class="content"> <div class="content">
<div class="d-flex"> <div class="d-flex">
<img src="Content/Imagenes/CACOA-6.png" height="45" class="me-3" /> <img src="Content/Imagenes/CACOA-6.png" height="45" class="me-3" />
@if(nombreColegio!="CACOA") @if (nombreColegio != "CACOA")
{ {
<div class="ms-auto"> <div class="ms-auto">
<img src="data:image/png;base64, @System.Convert.ToBase64String(logoColegioArray)" height="45" /> <img src="data:image/png;base64, @System.Convert.ToBase64String(logoColegioArray)" height="45" />
@@ -27,37 +24,49 @@
<h4 class="mt-2">Acceso a la Herramienta</h4> <h4 class="mt-2">Acceso a la Herramienta</h4>
<hr /> <hr />
<EditForm Model="login" FormName="loginForm" OnValidSubmit="Acceder"> <EditForm Model="login" FormName="loginForm" OnValidSubmit="Acceder">
<DataAnnotationsValidator></DataAnnotationsValidator> <DataAnnotationsValidator />
<div class="form-group"> <div class="form-group">
<label for="exampleInputEmail1">Clave de acceso</label> <label for="clave">Clave de acceso</label>
<input type="number" class="form-control" @bind-value="@login.codigo" placeholder="0000000000000" id="clave" /> <input type="number" class="form-control" @bind-value="login.codigo" placeholder="0000000000000" id="clave" />
<ValidationMessage For="() => login.codigo" /> <ValidationMessage For="() => login.codigo" />
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Password</label> <label>Password</label>
<div class="input-group"> <div class="input-group">
<PasswordInput Class="form-control" @bind-Value="@login.password" Id="pass" /> <PasswordInput Class="form-control" @bind-Value="login.password" Id="pass" />
</div> </div>
<ValidationMessage For="() => login.password" /> <ValidationMessage For="() => login.password" />
</div> </div>
<div class="form-group d-flex"> <div class="form-group d-flex">
@* <input type="checkbox" class="form-check-input" id="chkRecuerda" /> *@ <CheckboxInput Class="form-check-input"
<CheckboxInput Class="form-check-input" Id="chkRecuerda" Value=@recuerda ValueExpression="() => recuerda" ValueChanged="(value) => checkCambiado(value)" /> Id="chkRecuerda"
<label class="form-check-label" for="Recuerdame">Recordarme</label> Value="@recuerda"
ValueExpression="() => recuerda"
ValueChanged="checkCambiado" />
<label class="form-check-label" for="chkRecuerda">Recordarme</label>
</div> </div>
<div class="form-group"> <div class="form-group">
<small class="form-text text-muted">Si es la primera vez que utiliza la herramienta, <a href="NuevoAcceso" class="mt-2">cree una nueva clave de acceso</a></small> <small class="form-text text-muted">
Si es la primera vez que utiliza la herramienta,
<a href="NuevoAcceso" class="mt-2">cree una nueva clave de acceso</a>
</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<p class="form-text text-muted" style="color:red !important">@mensajeError</p> <p class="form-text text-muted" style="color:red !important">@mensajeError</p>
</div> </div>
<button type="submit" class="btnBlue"> Acceder </button>
<hr />
<div class="d-flex">
<button type="submit" class="btnBlue">Acceder</button>
<hr />
<div class="d-flex">
<div class="ms-auto"> <div class="ms-auto">
<p style="font-size:10px;margin-bottom:0px" class="text-muted">Desarrollado por:</p> <p style="font-size:10px;margin-bottom:0px" class="text-muted">Desarrollado por:</p>
<img src="Content/Imagenes/LogoTcsColor.png" height="20" class="me-3" /> <img src="Content/Imagenes/LogoTcsColor.png" height="20" class="me-3" />
@@ -68,96 +77,128 @@
</div> </div>
</div> </div>
</div> </div>
@code {
public tsHerramientasCACOA bd; @code {
public tsHerramientasCACOA bd = default!;
private LoginVM login = new LoginVM(); private LoginVM login = new LoginVM();
private string mensajeError = ""; private string mensajeError = "";
private bool recuerda = false; private bool recuerda = false;
string? urlAnterior = "";
string rutaActual = "";
private byte[] logoColegioArray = []; private byte[] logoColegioArray = [];
private string nombreColegio = ""; private string nombreColegio = "";
protected override Task OnInitializedAsync()
protected override async Task OnInitializedAsync()
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: false);
nombreColegio = bd.enumeraciones.First(x => x.Codigo == "CW.NOMBRECOLEGIO").ValorAlfabetico1; nombreColegio = bd.enumeraciones.First(x => x.Codigo == "CW.NOMBRECOLEGIO").ValorAlfabetico1;
logoColegioArray = bd.ficheros.Where(x => x.NombreFichero == "LogoColegio").Select(x => x.Fichero).First(); logoColegioArray = bd.ficheros
.Where(x => x.NombreFichero == "LogoColegio")
.Select(x => x.Fichero)
.First();
await ProtectedLocalStore.SetAsync("idUsuario", 0); return Task.CompletedTask;
await ProtectedLocalStore.SetAsync("EsAdmin", false);
// Limpiar almacenamiento local o sesión si se está utilizando
if (HttpContextAccessor?.HttpContext?.Session != null)
{
HttpContextAccessor.HttpContext.Session.Clear();
} }
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender)
return;
var rec = await ProtectedLocalStore.GetAsync<bool>("rec"); var rec = await ProtectedLocalStore.GetAsync<bool>("rec");
if(rec.Value==true){ if (rec.Success && rec.Value)
{
var usuario = await ProtectedLocalStore.GetAsync<int>("US"); var usuario = await ProtectedLocalStore.GetAsync<int>("US");
var clave = await ProtectedLocalStore.GetAsync<string>("PS"); var clave = await ProtectedLocalStore.GetAsync<string>("PS");
if (usuario.Success)
login.codigo = usuario.Value; login.codigo = usuario.Value;
if (clave.Success)
login.password = clave.Value; login.password = clave.Value;
recuerda = true; recuerda = true;
StateHasChanged();
}
} }
} private Task checkCambiado(bool value)
private async void checkCambiado(bool e)
{ {
recuerda = e; recuerda = value;
return Task.CompletedTask;
} }
private async Task Acceder() private async Task Acceder()
{ {
var adminUser = bd.enumeraciones.First(x=> x.Codigo=="CW.ADMIN"); mensajeError = "";
var adminUser = bd.enumeraciones.First(x => x.Codigo == "CW.ADMIN");
if (login.codigo == adminUser.ValorNumerico1 && login.password == adminUser.ValorAlfabetico1) if (login.codigo == adminUser.ValorNumerico1 && login.password == adminUser.ValorAlfabetico1)
{ {
await ProtectedLocalStore.SetAsync("idUsuario", -1);
await ProtectedLocalStore.SetAsync("EsAdmin", true);
UserState.idUser = -1; UserState.idUser = -1;
UserState.PuedeAcceder =true; UserState.EsAdmin = true;
UserState.PuedeAcceder = true;
Navigation.NavigateTo("/PanelControlConf", forceLoad: true); UserState.RedireccionValida = true;
}
else
{
var usuario = bd.usuarios.FirstOrDefault(x => x.Codigo == login.codigo && x.Contrasena == login.password);
if (usuario == null)
{
mensajeError = "Usuario no encontrado en la base de datos.";
}
else
{
await ProtectedLocalStore.SetAsync("idUsuario", usuario.idUsuario);
await ProtectedLocalStore.SetAsync("EsAdmin", false);
UserState.idUser = usuario.idUsuario;
UserState.PuedeAcceder =true;
await GuardarSesion();
if (recuerda) if (recuerda)
{ {
await ProtectedLocalStore.SetAsync("US", login.codigo); await ProtectedLocalStore.SetAsync("US", login.codigo);
await ProtectedLocalStore.SetAsync("PS", login.password); await ProtectedLocalStore.SetAsync("PS", login.password ?? "");
await ProtectedLocalStore.SetAsync("rec", true); await ProtectedLocalStore.SetAsync("rec", true);
} }
else else
{ {
await ProtectedLocalStore.DeleteAsync("US");
await ProtectedLocalStore.DeleteAsync("PS");
await ProtectedLocalStore.SetAsync("rec", false); await ProtectedLocalStore.SetAsync("rec", false);
} }
Navigation.NavigateTo("/PanelControlConf");
return;
}
Navigation.NavigateTo("/PanelControl", forceLoad: true); var usuario = bd.usuarios.FirstOrDefault(x => x.Codigo == login.codigo && x.Contrasena == login.password);
if (usuario is null)
{
mensajeError = "Usuario no encontrado en la base de datos.";
return;
} }
UserState.idUser = usuario.idUsuario;
UserState.EsAdmin = false;
UserState.PuedeAcceder = true;
UserState.RedireccionValida = true;
await GuardarSesion();
if (recuerda)
{
await ProtectedLocalStore.SetAsync("US", login.codigo);
await ProtectedLocalStore.SetAsync("PS", login.password ?? "");
await ProtectedLocalStore.SetAsync("rec", true);
} }
else
{
await ProtectedLocalStore.DeleteAsync("US");
await ProtectedLocalStore.DeleteAsync("PS");
await ProtectedLocalStore.SetAsync("rec", false);
}
Navigation.NavigateTo("/PanelControl");
}
private async Task GuardarSesion()
{
await ProtectedLocalStore.SetAsync("userSession", new UserSessionData
{
idUser = UserState.idUser,
EsAdmin = UserState.EsAdmin,
PuedeAcceder = UserState.PuedeAcceder,
RedireccionValida = UserState.RedireccionValida
});
} }
} }
`

View File

@@ -1,13 +1,14 @@
@page "/NuevoAcceso" @page "/NuevoAcceso"
@using HerramientaCASA.Components.Layout @using HerramientaCASA.Components.Layout
@using HerramientaCASA.Model
@using bdHerramientaCACOA.db @using bdHerramientaCACOA.db
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@rendermode InteractiveServer @rendermode InteractiveServer
@layout LoginLayout @layout DenegadoLayout
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject ProtectedLocalStorage ProtectedLocalStore @inject ProtectedLocalStorage ProtectedLocalStore
@inject UserState UserState
<div class="back"> <div class="back">
<div class="div-center"> <div class="div-center">
@@ -64,10 +65,12 @@
nuevoAcceso.Codigo = nuevoAcceso.idUsuario; nuevoAcceso.Codigo = nuevoAcceso.idUsuario;
bd.SaveChanges(); bd.SaveChanges();
await ProtectedLocalStore.SetAsync("idUsuario", nuevoAcceso.idUsuario); //await ProtectedLocalStore.SetAsync("idUsuario", nuevoAcceso.idUsuario);
//UserState.idUser = nuevoAcceso.idUsuario;
Navigation.NavigateTo("/ClaveGenerada", forceLoad: true); Navigation.NavigateTo("/Login");
} }
} }
} }

View File

@@ -71,8 +71,8 @@
{ {
bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: true); bd = tsHerramientasCACOA.NuevoContexto(SoloLectura: true);
var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario"); //var obtenerID = await ProtectedLocalStore.GetAsync<int>("idUsuario");
idUser = obtenerID.Value; idUser = UserState.idUser;
listadoSimulaciones = bd.simulaciones.Include(x => x.idTipoSimulacionNavigation).Include(x => x.idFicheroJSONNavigation).Where(x => x.idCodigo == idUser && x.idTipoSimulacionNavigation.Codigo == "TIPOHERRAMIENTA." + TipoSimulacion).ToList(); listadoSimulaciones = bd.simulaciones.Include(x => x.idTipoSimulacionNavigation).Include(x => x.idFicheroJSONNavigation).Where(x => x.idCodigo == idUser && x.idTipoSimulacionNavigation.Codigo == "TIPOHERRAMIENTA." + TipoSimulacion).ToList();
} }

View File

@@ -35,7 +35,7 @@
private void irNuevaSimulacion() private void irNuevaSimulacion()
{ {
Navigation.NavigateTo("/Bajas", true); Navigation.NavigateTo("/Bajas", false);
} }
} }

View File

@@ -36,7 +36,7 @@
private void irNuevaSimulacion() private void irNuevaSimulacion()
{ {
Navigation.NavigateTo("/HerramientaURBAN", true); Navigation.NavigateTo("/HerramientaURBAN", false);
} }
} }

View File

@@ -37,7 +37,7 @@
private void irNuevaSimulacion() private void irNuevaSimulacion()
{ {
Navigation.NavigateTo("/HerramientaCASAS", true); Navigation.NavigateTo("/HerramientaCASAS", false);
} }
} }

View File

@@ -36,7 +36,7 @@
private void irNuevaSimulacion() private void irNuevaSimulacion()
{ {
Navigation.NavigateTo("/LicitacionCASA", true); Navigation.NavigateTo("/LicitacionCASA", false);
} }
} }

View File

@@ -36,7 +36,7 @@
private void irNuevaSimulacion() private void irNuevaSimulacion()
{ {
Navigation.NavigateTo("/LicitacionesURBAN", true); Navigation.NavigateTo("/LicitacionesURBAN", false);
} }
} }

View File

@@ -2,64 +2,21 @@
{ {
public class UserState public class UserState
{ {
private readonly object _lock = new object(); public int idUser { get; set; }
private int _idUser; public bool EsAdmin { get; set; }
private bool _esAdmin; public bool PuedeAcceder { get; set; }
private bool _puedeAcceder; public bool RedireccionValida { get; set; }
public int idUser public bool EstaCargado { get; set; }
{ //public DateTime UltimoAcceso { get; set; }
get
{
lock (_lock)
{
return _idUser;
}
}
set
{
lock (_lock)
{
_idUser = value;
}
}
}
public bool EsAdmin public void Limpiar()
{ {
get idUser = 0;
{ EsAdmin = false;
lock (_lock) PuedeAcceder = false;
{ RedireccionValida = false;
return _esAdmin; EstaCargado = true;
//UltimoAcceso = DateTime.Now;
} }
} }
set
{
lock (_lock)
{
_esAdmin = value;
}
}
}
public bool PuedeAcceder
{
get
{
lock (_lock)
{
return _puedeAcceder;
}
}
set
{
lock (_lock)
{
_puedeAcceder = value;
}
}
}
}
} }

View File

@@ -1,4 +1,5 @@
using bdHerramientaCACOA.dbcontext; using bdHerramientaCACOA.dbcontext;
using bdHerramientaCACOA.HerramientaUrban;
using DinkToPdf; using DinkToPdf;
using DinkToPdf.Contracts; using DinkToPdf.Contracts;
using HerramientaCASA; using HerramientaCASA;
@@ -7,10 +8,12 @@ using HerramientaCASA.Model;
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System.Globalization; using System.Globalization;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using tsUtilidades; using tsUtilidades;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@@ -57,7 +60,7 @@ builder.Services.AddSession(options =>
builder.Services.AddHttpClient(); builder.Services.AddHttpClient();
builder.Services.AddBlazorBootstrap(); builder.Services.AddBlazorBootstrap();
builder.Services.AddAntiforgery(); builder.Services.AddAntiforgery();
builder.Services.AddSingleton<UserState>(); builder.Services.AddScoped<UserState>();
builder.Services.AddScoped<ProtectedLocalStorage>(); builder.Services.AddScoped<ProtectedLocalStorage>();
var app = builder.Build(); var app = builder.Build();
@@ -94,29 +97,41 @@ app.UseAntiforgery();
app.Use(async (context, next) => app.Use(async (context, next) =>
{ {
var userState = context.RequestServices.GetService<UserState>(); //var userState = context.RequestServices.GetService<UserState>();
var path = context.Request.Path; //var path = context.Request.Path;
if (path == "/" || //if (path == "/" ||
path.StartsWithSegments("/_blazor") || // path == "/Denegado" ||
path.StartsWithSegments("/Content") || // path.StartsWithSegments("/_blazor") ||
path.StartsWithSegments("/Scripts") || // path.StartsWithSegments("/_content") ||
path.StartsWithSegments("/favicon.ico") || // path.StartsWithSegments("/Content") ||
path.StartsWithSegments("/_framework")) // path.StartsWithSegments("/Scripts") ||
{ // path.StartsWithSegments("/favicon.ico") ||
await next(); // path.StartsWithSegments("/_framework") ||
return; // (path == "/Login" && userState.RedireccionValida == true))
}
//// Redirigir al home si no hay token y la ruta no es p<>blica
//if (userState?.idUser == 0)
//{ //{
// Console.WriteLine($"Redirigiendo al home desde: {path}"); // await next();
// context.Response.Redirect("/");
// return; // return;
//} //}
// Continuar con la solicitud
//if (userState?.RedireccionValida == false)
//{
// Console.WriteLine($"Redirigiendo al home desde: {path}");
// context.Response.Redirect("/");
// await next();
// return;
//}
//else
//if (userState?.idUser == 0)
//{
// Console.WriteLine($"Redirigiendo al home desde: {path}");
// context.Response.Redirect("/Login");
// await next();
// return;
//}
////Continuar con la solicitud
await next(); await next();
}); });

View File

@@ -5,6 +5,7 @@ using bdHerramientaCACOA.HerramientaURBAN;
using BlazorBootstrap; using BlazorBootstrap;
using ClosedXML.Excel; using ClosedXML.Excel;
using DocumentFormat.OpenXml.Office2013.Drawing.ChartStyle; using DocumentFormat.OpenXml.Office2013.Drawing.ChartStyle;
using DocumentFormat.OpenXml.Spreadsheet;
using HerramientaCASA.Components.Pages; using HerramientaCASA.Components.Pages;
using HerramientaCASA.Components.Pages.HerramientaCASATabs; using HerramientaCASA.Components.Pages.HerramientaCASATabs;
using HerramientaCASA.Model; using HerramientaCASA.Model;
@@ -1513,5 +1514,7 @@ namespace HerramientaCASA
return table; return table;
} }
//private static
} }
} }

View File

@@ -6,12 +6,12 @@
} }
}, },
"ConnectionStrings": { "ConnectionStrings": {
"WriteConnection": "Server=localhost;Port=22222;Database=herramientascoaaragon;User Id=cacoa;Password=cacoa2018-;", //"WriteConnection": "Server=localhost;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;",
"ReadOnlyConnection": "Server=localhost;Port=22222;Database=herramientascoaaragon;User Id=cacoa;Password=cacoa2018-;" //"ReadOnlyConnection": "Server=localhost;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;"
// CONEXIÓN CACOA // CONEXIÓN CACOA
//"WriteConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;", "WriteConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;",
//"ReadOnlyConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;" "ReadOnlyConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoa;User Id=cacoa;Password=cacoa2018-;"
// CONEXIÓN Herramienta Cacoa Generica // CONEXIÓN Herramienta Cacoa Generica
//"WriteConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoagenerica;User Id=cacoa;Password=cacoa2018-;", //"WriteConnection": "Server=77.229.174.85;Port=22222;Database=herramientascacoagenerica;User Id=cacoa;Password=cacoa2018-;",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB