Dans ce exaple projet avec JWT l'authentification de nous se comment autoriser uniquement les utilisateurs authentifiés à certains itinéraire:
import { RouterConfig } from '@angular/router';
import { Home } from './home';
import { Login } from './login';
import { Signup } from './signup';
import { AuthGuard } from './common/auth.guard';
export const routes: RouterConfig = [
{ path: '', component: Login },
{ path: 'login', component: Login },
{ path: 'signup', component: Signup },
{ path: 'home', component: Home, canActivate: [AuthGuard] },
{ path: '**', component: Login },
];
Je voudrais faire plus loin et d'indiquer également ce rôle d'utilisateur d'avoir l'accès à la voie - mais je ne sais pas comment passer en argument à canActivate AuthGuard (src). Donc je voudrais obtenir quelque chose comme ceci (par exemple, j'ai deux rôles: Administrateur et Employé):
{ path: 'home', component: Home, canActivate: [AuthGuard] },
{ path: 'users', component: AdminUsers, canActivate: [AuthGuard('Admin')] },
{ path: 'users', component: Employees, canActivate: [AuthGuard('Employee')] },
D'où mon AuthGuard pourrait ressembler à quelque chose comme ceci (où userRole(= Administrateur ou d'un Employé ou nulle) est passé en paramètre à AuthGuard):
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(userRole) {
if (!userRole || JWT.user().role == userRole) {
return true;
}
this.router.navigate(['/login']);
return false;
}
}
où JWT.de l'utilisateur.le rôle est helper qui lire du rôle de l'utilisateur stockées dans JWT jeton. Est-il un moyen de faire quelque chose de similaire, comme au-dessus de l'idée?