diff --git a/src/_guards/auth.guard.ts b/src/_guards/auth.guard.ts new file mode 100644 index 0000000..62674ea --- /dev/null +++ b/src/_guards/auth.guard.ts @@ -0,0 +1,63 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; + + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard implements CanActivate { + + constructor( + + ) { } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + const menuInfo = localStorage.getItem('menu'); + const menuPermisos = menuInfo ? JSON.parse(atob(menuInfo)) : null; + const fullUrl = window.location.href; + const url = new URL(fullUrl); + const path = url.pathname; + + // Obtener parámetros de la ruta + const params = route.params; + + if (menuPermisos != null) { + // Pasar tanto la URL como los parámetros a la función de verificación + if (checkUrlExists(menuPermisos, path, params)) { + return true; + } + } + return false; + } + + canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + return this.canActivate(route, state); + } +} + +// Recorrer el menú para verificar si la URL y los parámetros existen +function checkUrlExists(menuItems: any, targetUrl: string, params: any) { + return menuItems.some((item: any) => { + // Verificar la URL y los parámetros + if (item.Url === targetUrl && checkParams(item.Params, params)) { + return true; + } + if (item.Opciones && item.Opciones.length > 0) { + return checkUrlExists(item.Opciones, targetUrl, params); + } + return false; + }); +} + +// Verificar los parámetros de la ruta +function checkParams(expectedParams: any, actualParams: any): boolean { + if (!expectedParams) { + return true; // No se requieren parámetros específicos + } + for (let key in expectedParams) { + if (expectedParams[key] !== actualParams[key]) { + return false; // Un parámetro no coincide + } + } + return true; // Todos los parámetros coinciden +} \ No newline at end of file diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index a8b8dd0..ee6357f 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -3,14 +3,12 @@ import { APP_BASE_HREF } from '@angular/common'; import { NgModule } from '@angular/core'; import { provideHttpClient, withFetch } from '@angular/common/http'; import { RouterModule, Routes } from '@angular/router'; +import { AuthGuard } from 'src/_guards/auth.guard'; export const routes: Routes = [ - { - path: "gestion-roles", - loadChildren: () => import ('./modules/gestion-roles/gestion-roles.module').then(m => m.GestionRolesModule), - }, { path: "gestion-usuarios", + canActivate: [AuthGuard], loadChildren: () => import ('./modules/gestion-usuarios/gestion-usuarios.module').then(m => m.GestionUsuariosModule), }, ]; diff --git a/src/app/modules/gestion-roles/form-roles/form-roles.component.html b/src/app/modules/gestion-roles/form-roles/form-roles.component.html deleted file mode 100644 index 8f0438a..0000000 --- a/src/app/modules/gestion-roles/form-roles/form-roles.component.html +++ /dev/null @@ -1,44 +0,0 @@ - \ No newline at end of file diff --git a/src/app/modules/gestion-roles/form-roles/form-roles.component.scss b/src/app/modules/gestion-roles/form-roles/form-roles.component.scss deleted file mode 100644 index abcbec1..0000000 --- a/src/app/modules/gestion-roles/form-roles/form-roles.component.scss +++ /dev/null @@ -1,78 +0,0 @@ -*:not(mat-icon) { - font-family: Roboto, "Helvetica Neue", sans-serif !important; - } - - .container-border { - margin: 3% 0% 3% 0%; - border: 1px solid var(--primary); - padding: 1%; - border-radius: 15px; - } - - .textGuide { - background-color: #ffff; - border: 1px solid var(--primary); - border-radius: 15px 15px 15px 15px; - box-shadow: var(--primary) 3px 4px 0; - color: #0a0a0a; - display: inline-block; - font-size: 1.1em; - padding: 1%; - text-decoration: none; - margin-bottom: 1%; - width: 77%; - } - .menu { - display: flex; - flex-wrap: wrap; - } - - .left-menu, .right-menu { - flex: 1 1 35%; - margin: 1%; - } - - .listaRoles { - box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, 0.2); - max-height: 96px; - overflow-y: auto; - padding: 10px; - } - - .button-container { - margin: 1%; - display: flex; - flex-direction: column; - justify-content: center !important; /* Alinea los botones verticalmente en el centro */ - align-items: center !important; /* Alinea los botones horizontalmente en el centro */ - gap: 10px; - .mat-raised-button { - width: 95%; - } - } - - .btnGuardar { - display: flex; - justify-content: flex-end; /* Alinea el contenido a la derecha */ - height: fit-content; /* Asegura que el contenedor ocupe toda la altura */ - } - - .azul-oscuro { - background-color: #0058a5; - color: white; - } - - @media screen and (max-width: 1100px) { - .menu { - flex-direction: column; - } - .button-container { - flex-direction: row; - } - .button-container { - .mat-raised-button { - width: 20%; - } - } - } - \ No newline at end of file diff --git a/src/app/modules/gestion-roles/form-roles/form-roles.component.spec.ts b/src/app/modules/gestion-roles/form-roles/form-roles.component.spec.ts deleted file mode 100644 index a2ebb5c..0000000 --- a/src/app/modules/gestion-roles/form-roles/form-roles.component.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { FormRolesComponent } from './form-roles.component'; - -describe('FormRolesComponent', () => { - let component: FormRolesComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [FormRolesComponent] - }); - fixture = TestBed.createComponent(FormRolesComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/modules/gestion-roles/form-roles/form-roles.component.ts b/src/app/modules/gestion-roles/form-roles/form-roles.component.ts deleted file mode 100644 index 551591c..0000000 --- a/src/app/modules/gestion-roles/form-roles/form-roles.component.ts +++ /dev/null @@ -1,285 +0,0 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { Rol, Usuario } from '../utils'; -import { RequestManager } from 'src/app/managers/requestManager'; -import { TokenService } from 'src/app/managers/token'; -import { Router } from '@angular/router'; -import Swal from 'sweetalert2'; -import { environment } from 'src/environments/environment'; - - -@Component({ - selector: 'app-form-roles', - templateUrl: './form-roles.component.html', - styleUrls: ['./form-roles.component.scss'] -}) -export class FormRolesComponent /*implements OnInit*/ { - // rolesUsuario: Rol[] = []; - // rolesSistema: Rol[] = [ - // { rol: 'ROL_AUDITOR', selected: false }, - // { rol: 'ROL_EJECUTOR', selected: false }, - // { rol: 'ROL_SOPORTE', selected: false } - // ]; - - // @Input() usuario: Usuario = { - // role: [], - // documento: '', - // email: '', - // Estado: '' - // }; - - // @Output() errorEnPeticion = new EventEmitter(); - - // constructor( - // private request: RequestManager, - // private router: Router, - // private tokenService: TokenService // Inyecta el servicio de token - // ) { } - - // ngOnInit(): void { - // this.initializeUserFromToken(); - // this.rolesUsuario = this.formatearRoles(this.usuario); - // this.rolesSistema = this.rolesSistema.filter(sistemaRol => { - // return !this.rolesUsuario.some(usuarioRol => usuarioRol.rol === sistemaRol.rol); - // }); - - // this.validarRoles(this.rolesUsuario, this.rolesSistema); - // } - - // //Se obtienen los datos del usuario desde el token en el local storage de manera temporal - // initializeUserFromToken(): void { - // const token = this.tokenService.getToken(); - // if (token) { - // const payload = JSON.parse(atob(token.split('.')[1])); - // this.usuario = { - // role: payload.roles || ['ROL_SOPORTE'], //Se agrega un rol por defecto para pruebas - // documento: payload.documento || '', - // email: payload.email || '', - // Estado: payload.Estado || 'Activo' - // }; - // } - // console.log(this.usuario); - // } - - // seleccionarRol(item: Rol) { - // item.selected = !item.selected; - // } - - // vincularRol() { - // const rolesSeleccionados = this.rolesSistema.filter(item => item.selected); - // if (rolesSeleccionados.length === 0) return; - // Swal.fire({ - // title: 'Vincular Rol', - // icon: 'warning', - // text: `¿Está seguro de vincular el rol al usuario?, si el usuario tiene otra vinculación se verá afectada con el cambio de rol`, - // showCancelButton: true, - // confirmButtonText: `Si`, - // cancelButtonText: `No`, - // }).then((result) => { - // if (result.isConfirmed) { - // const successfulResponses: any[] = []; // Variable para almacenar las respuestas exitosas - - // rolesSeleccionados.reduce((promiseChain, rol) => { - // return promiseChain.then(() => { - // return new Promise((resolve, reject) => { - // let body = { - // "user": this.usuario.email, - // "rol": rol.rol - // }; - // this.mostrarMensajeCarga(); - - // this.request.post(`${environment.AUTENTICACION_MID}/rol/add`, '', body) - // .subscribe((data) => { - // if (data != null && data != undefined && data != "") { - // this.cerrarMensajeCarga(); - // data.rolUsuario = rol; // Agregar el nombre del rol a la respuesta - // successfulResponses.push(data); // Almacenar la respuesta exitosa - // resolve(); - // } - // }, (error) => { - // Swal.fire({ - // title: 'Error en la operación', - // text: `No se pudo vincular el rol ${rol.rol} al usuario`, - // icon: 'warning', - // showConfirmButton: false, - // timer: 2500 - // }).then(() => { - // this.enviarErrorPeticion(); - // }); - // reject(error); - // }); - // }); - // }); - // }, Promise.resolve()) - // .then(async () => { - // for (const response of successfulResponses) { - // if (response != null && response != undefined) { - // if (response.data != "" && response.status === 200) { - // if (!this.rolesUsuario.find(i => i.rol === response.rolUsuario.rol)) { - // this.rolesUsuario.push({ ...response.rolUsuario }); - // } - // this.rolesSistema = this.rolesSistema.filter(item => !item.selected); - // await this.mostrarMensajeExito(response.rolUsuario.rol, 'vincular'); - // } else if (response.status === 400 && response.success == false) { - // this.mostrarMensajeError(`El usuario ya tiene el rol ${response.rolUsuario.rol} asignado`); - // } else { - // this.mostrarMensajeError(`No se pudo vincular el rol ${response.rolUsuario.rol} al usuario`); - // } - // } - // } - // this.clearSelection(); - // }).catch(error => { - // console.error('Error en alguna de las promesas de vinculación de roles:', error); - // }); - // } else if (result.dismiss === Swal.DismissReason.cancel) { - // Swal.fire({ - // title: 'Cambio cancelado', - // icon: 'error', - // showConfirmButton: false, - // timer: 2500 - // }); - // } - // }); - // } - - // desvincularRol() { - // const rolesSeleccionados = this.rolesUsuario.filter(item => item.selected); - // if (rolesSeleccionados.length === 0) return; - // Swal.fire({ - // title: 'Desvincular Rol', - // icon: 'warning', - // text: `¿Está seguro de desvincular el rol al usuario? Si el usuario tiene otra vinculación, se verá afectada con el cambio de rol.`, - // showCancelButton: true, - // confirmButtonText: `Sí`, - // cancelButtonText: `No`, - // }).then((result) => { - // if (result.isConfirmed) { - // const successfulResponses: any[] = []; // Variable para almacenar las respuestas exitosas - - // rolesSeleccionados.reduce((promiseChain, rol) => { - // return promiseChain.then(() => { - // return new Promise((resolve, reject) => { - // let body = { - // "user": this.usuario.email, - // "rol": rol.rol - // }; - // this.mostrarMensajeCarga(); - - // this.request.post(`${environment.AUTENTICACION_MID}/rol/remove`, '', body) - // .subscribe((data: any) => { - // if (data != null && data != undefined && data != "") { - // this.cerrarMensajeCarga(); - // data.rolUsuario = rol; // Agregar el nombre del rol a la respuesta - // successfulResponses.push(data); // Almacenar la respuesta exitosa - // resolve(); - // } - // }, (error) => { - // Swal.fire({ - // title: 'Error en la operación', - // text: 'No se pudo desvincular el rol del usuario', - // icon: 'warning', - // showConfirmButton: false, - // timer: 2500 - // }).then(() => { - // this.enviarErrorPeticion(); - // }); - // reject(error); - // }); - // }); - // }); - // }, Promise.resolve()) - // .then(async () => { - // for (const response of successfulResponses) { - // if (response != null && response != undefined) { - // if (response.data != "" && response.status === 200) { - // if (!this.rolesSistema.find(i => i.rol === response.rolUsuario.rol)) { - // this.rolesSistema.push({ ...response.rolUsuario }); - // } - // this.rolesUsuario = this.rolesUsuario.filter(item => !item.selected); - // await this.mostrarMensajeExito(response.rolUsuario.rol, 'desvincular'); - // } else if (response.status === 400 && response.success == false) { - // this.mostrarMensajeError(`El usuario no tiene el rol ${response.rolUsuario.rol} asignado`); - // } else { - // this.mostrarMensajeError(`No se pudo desvincular el rol ${response.rolUsuario.rol} del usuario`); - // } - // } - // } - // this.clearSelection(); - // }) - // .catch(error => { - // console.error('Error en alguna de las promesas de desvinculación de roles:', error); - // }); - // } else if (result.dismiss === Swal.DismissReason.cancel) { - // Swal.fire({ - // title: 'Cambio cancelado', - // icon: 'error', - // showConfirmButton: false, - // timer: 2500 - // }); - // } - // }); - // } - - // mostrarMensajeCarga(): void { - // Swal.fire({ - // title: 'Realizando petición...', - // allowEscapeKey: false, - // allowOutsideClick: false, - // didOpen: () => { - // Swal.showLoading(); - // } - // }); - // } - - // cerrarMensajeCarga(): void { - // Swal.close(); - // } - - // mostrarMensajeExito(rol: string, tipo: string) { - // let mensaje = ''; - // tipo == 'vincular' ? mensaje = `Rol ${rol} vinculado correctamente` : mensaje = `Rol ${rol} desvinculado correctamente`; - - // return new Promise(resolve => { - // Swal.fire({ - // title: 'Operación exitosa', - // text: mensaje, - // icon: 'success', - // showConfirmButton: false, - // timer: 2500, - // willClose: () => resolve(true) - // }); - // }); - // } - - // mostrarMensajeError(mensaje: any) { - // Swal.fire({ - // title: 'Error en la operación', - // text: mensaje, - // icon: 'warning', - // showConfirmButton: false, - // timer: 2500 - // }); - // } - - // clearSelection() { - // this.rolesUsuario.forEach(item => item.selected = false); - // this.rolesSistema.forEach(item => item.selected = false); - // } - - // formatearRoles(usuario: Usuario): Rol[] { - // return usuario.role - // .filter(rol => rol !== 'Internal/everyone' && rol !== 'Internal/selfsignup') - // .map(rol => ({ rol: rol, selected: false })); - // } - - // validarRoles(rolesUsuario: Rol[], rolesSistema: Rol[]) { - // // Crea un conjunto de roles del usuario para facilitar la búsqueda - // const rolesSet = new Set(rolesUsuario.map(role => JSON.stringify(role))); - - // // Filtra los roles del sistema excluyendo los del usuario - // this.rolesSistema = rolesSistema.filter(role => !rolesSet.has(JSON.stringify(role))); - // } - - // enviarErrorPeticion() { - // this.errorEnPeticion.emit(true); - // } -} \ No newline at end of file diff --git a/src/app/modules/gestion-roles/gestion-roles-routing.module.ts b/src/app/modules/gestion-roles/gestion-roles-routing.module.ts deleted file mode 100644 index 40a63b4..0000000 --- a/src/app/modules/gestion-roles/gestion-roles-routing.module.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { UsuariosComponent } from '../gestion-usuarios/consulta-usuarios/consulta-usuarios.component'; -import { FormRolesComponent } from './form-roles/form-roles.component' - - - -const routes: Routes = [ - { - path: 'form-roles', - component: FormRolesComponent - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class GestionRolesRoutingModule { } diff --git a/src/app/modules/gestion-roles/gestion-roles.module.ts b/src/app/modules/gestion-roles/gestion-roles.module.ts deleted file mode 100644 index f9cc19f..0000000 --- a/src/app/modules/gestion-roles/gestion-roles.module.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; - -import { GestionRolesRoutingModule } from './gestion-roles-routing.module'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FormRolesComponent } from './form-roles/form-roles.component' -import { HttpClientModule, provideHttpClient } from '@angular/common/http'; - -//Material -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatCardModule } from '@angular/material/card'; -import { MatInputModule } from '@angular/material/input'; -import { MatSelectModule } from '@angular/material/select'; -import { MatButtonModule } from '@angular/material/button'; -import { MatIconModule } from '@angular/material/icon'; -import { MatTableModule } from '@angular/material/table'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatPaginatorModule } from '@angular/material/paginator'; -@NgModule({ - declarations: [ - FormRolesComponent - ], - imports: [ - CommonModule, - GestionRolesRoutingModule, - ReactiveFormsModule, - HttpClientModule, - MatCardModule, - MatInputModule, - MatSelectModule, - MatButtonModule, - MatCheckboxModule, - MatIconModule, - MatTableModule, - MatFormFieldModule, - MatPaginatorModule - - ] -}) -export class GestionRolesModule { } diff --git a/src/app/modules/gestion-roles/utils/constantes.ts b/src/app/modules/gestion-roles/utils/constantes.ts deleted file mode 100644 index dc3321a..0000000 --- a/src/app/modules/gestion-roles/utils/constantes.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const ROL_ADMINISTRADOR = 'ROL_ADMINISTRADOR'; -export const ROL_AUDITOR = 'AUDITOR'; -export const ROL_EJECUTOR = 'EJECUTOR'; -export const ROL_JEFE = 'JEFE'; -export const ROL_ANALISTA = 'ANALISTA'; -export const ROL_SOPORTE = 'SOPORTE'; - - - diff --git a/src/app/modules/gestion-roles/utils/gestion-usuarios.models.ts b/src/app/modules/gestion-roles/utils/gestion-usuarios.models.ts deleted file mode 100644 index ef2742d..0000000 --- a/src/app/modules/gestion-roles/utils/gestion-usuarios.models.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface Usuario { - role: string[]; - documento: string; - email: string; - Estado: string; -} - -export interface Rol { - rol: string; - selected: boolean; -}; diff --git a/src/app/modules/gestion-roles/utils/index.ts b/src/app/modules/gestion-roles/utils/index.ts deleted file mode 100644 index 5279d9f..0000000 --- a/src/app/modules/gestion-roles/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './gestion-usuarios.models'; -export * from './constantes'; \ No newline at end of file diff --git a/src/app/modules/gestion-usuarios/actualizar-usuario/actualizar-usuario.component.html b/src/app/modules/gestion-usuarios/actualizar-usuario/actualizar-usuario.component.html index 3d2d550..c6c690e 100644 --- a/src/app/modules/gestion-usuarios/actualizar-usuario/actualizar-usuario.component.html +++ b/src/app/modules/gestion-usuarios/actualizar-usuario/actualizar-usuario.component.html @@ -115,6 +115,7 @@

Actualizar Usuario(a)