Если я правильно понял, вам нужно отображать кнопку только в том случае, если пользователь имеет право редактировать страницу.
Guard полезен, если вы хотите запретить доступ к странице для своего рода пользователь. Согласно вашему сообщению, все пользователи смогут получить доступ к странице. Однако не все смогут редактировать страницу.
Я думаю, вам понадобится распознаватель , чтобы отправлять пользовательские данные непосредственно с маршрута.
Вот как это работает:
@Injectable({ providedIn: 'root' })
export class MeResolver implements Resolve<any> {
constructor(private http: HttpClient) {}
resolve(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<any>|Promise<any>|any {
// This should return user data (take care of sending token too)
return this.http.get<any>(`${environment.api}/auth`)
}
}
В вашем файле маршрутизации вы должны иметь право:
{
path: '',
component: UserComponent,
resolve: [ MeResolver ],
}
Затем в вашем компоненте вы можете получить доступ к resolver с помощью свойства route
, например:
export class UserComponent {
$me: Observable<any> = this.route.data.pipe(map(elem => elem[0]));
constructor(private route: ActivatedRoute) { }
}
С этим вы можете скрыть кнопку «Редактировать» в вашем HTML:
<button (click)="edit()" *ngIf="(me$ | async)?.role.admin">EDIT</button>