Files
gameovergne-app/client/src/app/guards/admin-only.guard.ts

28 lines
1.0 KiB
TypeScript

import { inject } from '@angular/core';
import { CanActivateFn, CanMatchFn, Router, UrlTree, ActivatedRouteSnapshot, Route } from '@angular/router';
import { AuthService } from '../services/auth.service';
function requireAdmin(url?: string): boolean | UrlTree {
const authService: AuthService = inject(AuthService);
const router: Router = inject(Router);
// 1) pas connecté -> envoie vers /login (avec redirect)
if (!authService.isLoggedIn()) {
return router.createUrlTree(['/login'], { queryParams: { redirect: url ?? router.url } });
}
// 2) connecté mais pas ADMIN -> redirige vers /home (ou /403 si tu crées une page)
if (!authService.hasRole('Administrator')) {
return router.parseUrl('/home');
}
// 3) ok
return true;
}
export const adminOnlyCanActivate: CanActivateFn = (route: ActivatedRouteSnapshot): boolean | UrlTree =>
requireAdmin(route?.url?.map(u => u.path).join('/') ?? '/admin');
export const adminOnlyCanMatch: CanMatchFn = (route: Route): boolean | UrlTree =>
requireAdmin(route?.path ?? '/admin');