guardias
This commit is contained in:
parent
04b7840341
commit
89e97a3634
@ -9,57 +9,54 @@ import { DirectAuthService } from '../services/direct-auth.service';
|
|||||||
* El parámetro route.data['requireAll'] determina si se requieren todos los roles/grupos o solo alguno
|
* El parámetro route.data['requireAll'] determina si se requieren todos los roles/grupos o solo alguno
|
||||||
* Si no cumple con los requisitos, redirige a la página de acceso denegado
|
* Si no cumple con los requisitos, redirige a la página de acceso denegado
|
||||||
*/
|
*/
|
||||||
export const accessGuard: CanActivateFn = (
|
export const accessGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree => {
|
||||||
route: ActivatedRouteSnapshot,
|
const authService = inject(DirectAuthService);
|
||||||
state: RouterStateSnapshot
|
const router = inject(Router);
|
||||||
): boolean | UrlTree => {
|
|
||||||
const authService = inject(DirectAuthService);
|
// Primero verificar si está autenticado
|
||||||
const router = inject(Router);
|
if (!authService.isAuthenticated()) {
|
||||||
|
return router.createUrlTree(['/login'], {
|
||||||
// Primero verificar si está autenticado
|
queryParams: { returnUrl: state.url }
|
||||||
if (!authService.isAuthenticated()) {
|
});
|
||||||
return router.createUrlTree(['/login'], {
|
|
||||||
queryParams: { returnUrl: state.url }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtener los roles y grupos requeridos del data de la ruta
|
|
||||||
const requiredRoles = route.data['roles'] as Array<string> || [];
|
|
||||||
const requiredGroups = route.data['groups'] as Array<string> || [];
|
|
||||||
const requireAll = route.data['requireAll'] as boolean || false;
|
|
||||||
|
|
||||||
// Si no hay roles ni grupos requeridos, permitir acceso
|
|
||||||
if (requiredRoles.length === 0 && requiredGroups.length === 0) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verificar acceso según la configuración
|
|
||||||
let hasAccess = false;
|
|
||||||
|
|
||||||
if (requireAll) {
|
|
||||||
// Necesita cumplir TODOS los requisitos
|
|
||||||
let hasRequiredRoles = true;
|
|
||||||
let hasRequiredGroups = true;
|
|
||||||
|
|
||||||
if (requiredRoles.length > 0) {
|
|
||||||
hasRequiredRoles = authService.hasAllRoles(requiredRoles);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (requiredGroups.length > 0) {
|
// Obtener los roles y grupos requeridos del data de la ruta
|
||||||
hasRequiredGroups = authService.inAllGroups(requiredGroups);
|
const requiredRoles = route.data['roles'] as Array<string> || [];
|
||||||
|
const requiredGroups = route.data['groups'] as Array<string> || [];
|
||||||
|
const requireAll = route.data['requireAll'] as boolean || false;
|
||||||
|
|
||||||
|
// Si no hay roles ni grupos requeridos, permitir acceso
|
||||||
|
if (requiredRoles.length === 0 && requiredGroups.length === 0) {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
hasAccess = hasRequiredRoles && hasRequiredGroups;
|
// Verificar acceso según la configuración
|
||||||
} else {
|
let hasAccess = false;
|
||||||
// Necesita cumplir ALGUNO de los requisitos
|
|
||||||
hasAccess = (requiredRoles.length > 0 && authService.hasAnyRole(requiredRoles)) ||
|
if (requireAll) {
|
||||||
(requiredGroups.length > 0 && authService.inAnyGroup(requiredGroups));
|
// Necesita cumplir TODOS los requisitos
|
||||||
}
|
let hasRequiredRoles = true;
|
||||||
|
let hasRequiredGroups = true;
|
||||||
if (hasAccess) {
|
|
||||||
return true;
|
if (requiredRoles.length > 0) {
|
||||||
}
|
hasRequiredRoles = authService.hasAllRoles(requiredRoles);
|
||||||
|
}
|
||||||
// Si no cumple los requisitos, redirigir a página de acceso denegado
|
|
||||||
return router.createUrlTree(['/access-denied']);
|
if (requiredGroups.length > 0) {
|
||||||
|
hasRequiredGroups = authService.inAllGroups(requiredGroups);
|
||||||
|
}
|
||||||
|
|
||||||
|
hasAccess = hasRequiredRoles && hasRequiredGroups;
|
||||||
|
} else {
|
||||||
|
// Necesita cumplir ALGUNO de los requisitos
|
||||||
|
hasAccess = (requiredRoles.length > 0 && authService.hasAnyRole(requiredRoles)) ||
|
||||||
|
(requiredGroups.length > 0 && authService.inAnyGroup(requiredGroups));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasAccess) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si no cumple los requisitos, redirigir a página de acceso denegado
|
||||||
|
return router.createUrlTree(['/access-denied']);
|
||||||
};
|
};
|
||||||
@ -7,25 +7,22 @@ import { DirectAuthService } from '../services/direct-auth.service';
|
|||||||
* Guard que verifica si el usuario es administrador
|
* Guard que verifica si el usuario es administrador
|
||||||
* Si no es administrador, redirige a la página de acceso denegado
|
* Si no es administrador, redirige a la página de acceso denegado
|
||||||
*/
|
*/
|
||||||
export const adminGuard: CanActivateFn = (
|
export const adminGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree => {
|
||||||
route: ActivatedRouteSnapshot,
|
const authService = inject(DirectAuthService);
|
||||||
state: RouterStateSnapshot
|
const router = inject(Router);
|
||||||
): boolean | UrlTree => {
|
|
||||||
const authService = inject(DirectAuthService);
|
// Primero verificar si está autenticado
|
||||||
const router = inject(Router);
|
if (!authService.isAuthenticated()) {
|
||||||
|
return router.createUrlTree(['/login'], {
|
||||||
// Primero verificar si está autenticado
|
queryParams: { returnUrl: state.url }
|
||||||
if (!authService.isAuthenticated()) {
|
});
|
||||||
return router.createUrlTree(['/login'], {
|
}
|
||||||
queryParams: { returnUrl: state.url }
|
|
||||||
});
|
// Verificar si es administrador
|
||||||
}
|
if (authService.isAdmin()) {
|
||||||
|
return true;
|
||||||
// Verificar si es administrador
|
}
|
||||||
if (authService.isAdmin()) {
|
|
||||||
return true;
|
// Si no es administrador, redirigir a página de acceso denegado
|
||||||
}
|
return router.createUrlTree(['/access-denied']);
|
||||||
|
|
||||||
// Si no es administrador, redirigir a página de acceso denegado
|
|
||||||
return router.createUrlTree(['/access-denied']);
|
|
||||||
};
|
};
|
||||||
@ -7,10 +7,7 @@ import { DirectAuthService } from '../services/direct-auth.service';
|
|||||||
* Guard que verifica si el usuario está autenticado
|
* Guard que verifica si el usuario está autenticado
|
||||||
* Si el usuario no está autenticado, redirige al login con la URL de retorno
|
* Si el usuario no está autenticado, redirige al login con la URL de retorno
|
||||||
*/
|
*/
|
||||||
export const authGuard: CanActivateFn = (
|
export const authGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree => {
|
||||||
route: ActivatedRouteSnapshot,
|
|
||||||
state: RouterStateSnapshot
|
|
||||||
): boolean | UrlTree => {
|
|
||||||
const authService = inject(DirectAuthService);
|
const authService = inject(DirectAuthService);
|
||||||
const router = inject(Router);
|
const router = inject(Router);
|
||||||
|
|
||||||
@ -19,7 +16,7 @@ export const authGuard: CanActivateFn = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Si no está autenticado, redirigir a login con la URL de retorno
|
// Si no está autenticado, redirigir a login con la URL de retorno
|
||||||
return router.createUrlTree(['/login'], {
|
return router.createUrlTree(['/login'], {
|
||||||
queryParams: { returnUrl: state.url }
|
queryParams: { returnUrl: state.url }
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -8,33 +8,30 @@ import { DirectAuthService } from '../services/direct-auth.service';
|
|||||||
* Espera un array de grupos en route.data['groups']
|
* Espera un array de grupos en route.data['groups']
|
||||||
* Si no pertenece a los grupos necesarios, redirige a la página de acceso denegado
|
* Si no pertenece a los grupos necesarios, redirige a la página de acceso denegado
|
||||||
*/
|
*/
|
||||||
export const groupGuard: CanActivateFn = (
|
export const groupGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree => {
|
||||||
route: ActivatedRouteSnapshot,
|
const authService = inject(DirectAuthService);
|
||||||
state: RouterStateSnapshot
|
const router = inject(Router);
|
||||||
): boolean | UrlTree => {
|
|
||||||
const authService = inject(DirectAuthService);
|
// Primero verificar si está autenticado
|
||||||
const router = inject(Router);
|
if (!authService.isAuthenticated()) {
|
||||||
|
return router.createUrlTree(['/login'], {
|
||||||
// Primero verificar si está autenticado
|
queryParams: { returnUrl: state.url }
|
||||||
if (!authService.isAuthenticated()) {
|
});
|
||||||
return router.createUrlTree(['/login'], {
|
}
|
||||||
queryParams: { returnUrl: state.url }
|
|
||||||
});
|
// Obtener los grupos requeridos del data de la ruta
|
||||||
}
|
const requiredGroups = route.data['groups'] as Array<string>;
|
||||||
|
|
||||||
// Obtener los grupos requeridos del data de la ruta
|
// Si no hay grupos requeridos, permitir acceso
|
||||||
const requiredGroups = route.data['groups'] as Array<string>;
|
if (!requiredGroups || requiredGroups.length === 0) {
|
||||||
|
return true;
|
||||||
// Si no hay grupos requeridos, permitir acceso
|
}
|
||||||
if (!requiredGroups || requiredGroups.length === 0) {
|
|
||||||
return true;
|
// Usar la función de servicio para verificar grupos
|
||||||
}
|
if (authService.inAnyGroup(requiredGroups)) {
|
||||||
|
return true;
|
||||||
// Usar la función de servicio para verificar grupos
|
}
|
||||||
if (authService.inAnyGroup(requiredGroups)) {
|
|
||||||
return true;
|
// Si no pertenece a los grupos necesarios, redirigir a página de acceso denegado
|
||||||
}
|
return router.createUrlTree(['/access-denied']);
|
||||||
|
|
||||||
// Si no pertenece a los grupos necesarios, redirigir a página de acceso denegado
|
|
||||||
return router.createUrlTree(['/access-denied']);
|
|
||||||
};
|
};
|
||||||
@ -8,33 +8,30 @@ import { DirectAuthService } from '../services/direct-auth.service';
|
|||||||
* Espera un array de roles en route.data['roles']
|
* Espera un array de roles en route.data['roles']
|
||||||
* Si no tiene los roles necesarios, redirige a la página de acceso denegado
|
* Si no tiene los roles necesarios, redirige a la página de acceso denegado
|
||||||
*/
|
*/
|
||||||
export const roleGuard: CanActivateFn = (
|
export const roleGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree => {
|
||||||
route: ActivatedRouteSnapshot,
|
|
||||||
state: RouterStateSnapshot
|
|
||||||
): boolean | UrlTree => {
|
|
||||||
const authService = inject(DirectAuthService);
|
const authService = inject(DirectAuthService);
|
||||||
const router = inject(Router);
|
const router = inject(Router);
|
||||||
|
|
||||||
// Primero verificar si está autenticado
|
// Primero verificar si está autenticado
|
||||||
if (!authService.isAuthenticated()) {
|
if (!authService.isAuthenticated()) {
|
||||||
return router.createUrlTree(['/login'], {
|
return router.createUrlTree(['/login'], {
|
||||||
queryParams: { returnUrl: state.url }
|
queryParams: { returnUrl: state.url }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtener los roles requeridos del data de la ruta
|
// Obtener los roles requeridos del data de la ruta
|
||||||
const requiredRoles = route.data['roles'] as Array<string>;
|
const requiredRoles = route.data['roles'] as Array<string>;
|
||||||
|
|
||||||
// Si no hay roles requeridos, permitir acceso
|
// Si no hay roles requeridos, permitir acceso
|
||||||
if (!requiredRoles || requiredRoles.length === 0) {
|
if (!requiredRoles || requiredRoles.length === 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Usar la función de servicio para verificar roles
|
// Usar la función de servicio para verificar roles
|
||||||
if (authService.hasAnyRole(requiredRoles)) {
|
if (authService.hasAnyRole(requiredRoles)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si no tiene los roles necesarios, redirigir a página de acceso denegado
|
// Si no tiene los roles necesarios, redirigir a página de acceso denegado
|
||||||
return router.createUrlTree(['/access-denied']);
|
return router.createUrlTree(['/access-denied']);
|
||||||
};
|
};
|
||||||
@ -21,6 +21,6 @@ export const environment = {
|
|||||||
// Intervalo de log en milisegundos (1 segundo)
|
// Intervalo de log en milisegundos (1 segundo)
|
||||||
logInterval: 2000,
|
logInterval: 2000,
|
||||||
// Habilitar logs de inactividad
|
// Habilitar logs de inactividad
|
||||||
enableActivityLogs: true
|
enableActivityLogs: false
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -735,7 +735,9 @@ Alternativamente, puedes crear un mapper de tipo "User Attribute" si prefieres a
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
¿Qué logramos con esto? Fácil: que en el access token aparezcan los grupos a los que pertenece el usuario, tal cual los configuramos en LDAP. Esto puede ayudar para crear políticas de acceso a páginas o rutas protegidas para algún grupo en específico más adelante. 
|
¿Qué logramos con esto? Fácil: que en el access token aparezcan los grupos a los que pertenece el usuario, tal cual los configuramos en LDAP. Esto puede ayudar para crear políticas de acceso a páginas o rutas protegidas para algún grupo en específico más adelante.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## 11. Arquitectura del sistema
|
## 11. Arquitectura del sistema
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user