У меня есть приложение, которое я имею установку с Authentication Guard, чтобы сделать, что пользователи не могут получить доступ к приложению, если они не вошли в системе, как иПередача параметров в Guard углового 2
import { Injectable } from '@angular/core';
import {
CanActivate, Router,
ActivatedRouteSnapshot,
RouterStateSnapshot,
CanActivateChild } from '@angular/router';
import { AuthContext } from './auth-context.service';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router, private authContext: AuthContext) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
// Check to see if a user has a valid JWT
if (this.authContext.userInfo !== undefined && this.authContext.userInfo.isAuthenticated) {
// If they do, return true and allow the user to load the home component
return true;
}
// If not, they redirect them to the login page
this.router.navigate(['/login']);
return false;
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return this.canActivate(route, state);
}
}
Я хочу добавить еще один охранник для авторизации, которая проверит, находится ли пользователь в определенной роли. В настоящее время я скрываю ссылку в навигации на основе этой роли.
<div *ngIf="userInRole('Admin')">
This is secret stuff
</div>
Но если пользователь знает маршрут, он может просто подключить его к URL-адресу. Как я могу добавить функцию «userInRole()» в Guard? Мне нужно было бы передать имя роли и сделать код проверки. Помогают ли гвардии параметры?
Есть несколько решений здесь: http://stackoverflow.com/ вопросы/42719445/пасс-параметр-в-маршрут-охранник – rook