|
|
|
@ -1,5 +1,5 @@ |
|
|
|
|
import { Injectable } from '@angular/core'; |
|
|
|
|
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; |
|
|
|
|
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, Router } from '@angular/router'; |
|
|
|
|
import { Observable } from 'rxjs'; |
|
|
|
|
import { tap } from 'rxjs/operators'; |
|
|
|
|
|
|
|
|
@ -10,19 +10,36 @@ import { AuthService } from './auth.service'; |
|
|
|
|
*/ |
|
|
|
|
@Injectable() |
|
|
|
|
export class AuthGuard implements CanActivate { |
|
|
|
|
constructor(private authService: AuthService) { } |
|
|
|
|
constructor(private authService: AuthService, private router: Router) { } |
|
|
|
|
|
|
|
|
|
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> { |
|
|
|
|
return this.authService.canActivateProtectedRoutes$.pipe(tap(isLoggin => this.login(isLoggin))); |
|
|
|
|
return this.authService.canActivateProtectedRoutes$.pipe(tap(isLoggin => this.login(isLoggin,route))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Affiche la page de connexion si l'utilisateur n'est pas connecté. |
|
|
|
|
* Vérifie si l'utilisateur est connecté et si l'utilisateur est autorisé à accéder à la route. |
|
|
|
|
* @param isLoggin Booléen permettant de savoir si l'utilisateur est connecté ou non |
|
|
|
|
* @param route Route à laquelle l'utilisateur souhaite accéder |
|
|
|
|
*/ |
|
|
|
|
private login(isLoggin: boolean) { |
|
|
|
|
private login(isLoggin: boolean, route: ActivatedRouteSnapshot): boolean { |
|
|
|
|
if (!isLoggin) { |
|
|
|
|
this.authService.login(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const firstRole = this.authService.firstRole; |
|
|
|
|
|
|
|
|
|
if (firstRole) { |
|
|
|
|
// Vérifie si la route est restreinte par des rôles
|
|
|
|
|
if (route.data.roles && route.data.roles.indexOf(firstRole) === -1) { |
|
|
|
|
|
|
|
|
|
// l'utisateur n'est pas autorisé alors on le redirige vers la page d'accueil
|
|
|
|
|
this.router.navigate(['/']); |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// L'utilisateur est autorisé
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|