как скрыть или показать ссылку администратора - PullRequest
1 голос
/ 02 октября 2019

Я пытаюсь скрыть ссылки, и я уже посмотрел в документации и некоторые исправления здесь переполнения стека, но мое изменение кода только ухудшило ситуацию. Вот код.

AdminAuthGuardService

import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import { AuthService } from './auth.service';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';
import { UserService } from './user.service';

@Injectable()
export class AdminAuthGuardService implements CanActivate {

  constructor(private auth: AuthService,
  private userService: UserService) {}

  canActivate(): Observable<boolean> {
    return this.auth.appUser$
    .map(appUser => appUser.isAdmin);//the error is here
  }
}

auth.service

import { Injectable } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';
import * as firebase from 'firebase';
import { Observable } from 'rxjs';
import { ActivatedRoute } from '@angular/router';
import { AppUser } from './models/App-user';

import { UserService } from './user.service';
import 'rxjs/add/operator/switchmap';

@Injectable({
  providedIn: 'root'
})
export class AuthService {
user$: Observable<firebase.User>;

  constructor(
    private userService : UserService,
    private afAuth: AngularFireAuth, private route: ActivatedRoute) {
    this.user$=afAuth.authState;
  } 

login (){
  let returnUrl = this.route.snapshot.queryParamMap.get('returnUrl') || '/';
  localStorage.setItem('returlUrl', returnUrl);

  this.afAuth.auth.signInWithRedirect(new firebase.auth.GoogleAuthProvider());

}

logout () {
  this.afAuth.auth.signOut();
  }

  get appUser$() : Observable<AppUser> {
    return this.user$
  .switchMap(user => this.userService.get(user.uid))
} 
  }

bs -navbar компонент

import { Component } from '@angular/core';
import { AuthService } from '../auth.service';
import { AppUser } from '../models/App-user';

@Component({
  selector: 'bs-navbar',
  templateUrl: './bs-navbar.component.html',
  styleUrls: ['./bs-navbar.component.css']
})
export class BsNavbarComponent  {
  appUser: AppUser;

  constructor(private auth: AuthService) { 
   auth.appUser$.subscribe(appUser=> this.appUser = appUser);//the error is here 
  }

  logout() {
  this.auth.logout();
  }

}

Ошибка, которую яget is duplicate 1.identifier'iterator Result 'в node_modules @ types \ node 2. Наблюдаемый тип не назначается в adminAuthguard.service 3. Тип объекта углового огня не может быть назначен в аутентификации. обслуживание

1 Ответ

0 голосов
/ 02 октября 2019

Полагаю, вы используете Rxjs v6. Поскольку map является оператором, вы должны передать оператор карты следующим образом:

canActivate(): Observable<boolean> {
   return this.auth.appUser$.pipe(
      map(appUser => appUser.isAdmin);
   )
}

То же самое с вашим оператором карты коммутатора

get appUser$() : Observable<AppUser> {
    return this.user$.pipe(
       switchMap(user => this.userService.get(user.uid))
    )
}

Ваш импорт switchMap должен быть:

import { switchMap } from 'rxjs/operators';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...