首页 文章

使用Firebase进行基于角色的用户访问控制 - 语法错误(switchMap)

提问于
浏览
0

我尝试使用Firebase创建基于角色的用户访问控制,以便在用户通过身份验证&& admin ...时允许访问路由,并且我正在尝试使用本教程:https://angularfirebase.com/lessons/role-based-permissions-and-authorization-with-firebase-auth/

My AuthService

import { Injectable } from '@angular/core';
import {AngularFireAuth} from 'angularfire2/auth';
import {Observable} from 'rxjs/Observable';
import {User} from '../models/user.model';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
import {AngularFireDatabase} from 'angularfire2/database';
import * as firebase from 'firebase/app';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/switchMap';

@Injectable()
export class AuthService {
  user: BehaviorSubject<User> = new BehaviorSubject(null)

  constructor(private afAuth: AngularFireAuth, private db: AngularFireDatabase) {
    this.afAuth.authState
      .switchMap(auth => {
        if (auth) {
          /// signed in
          return this.db.object('users/' + auth.uid)
        } else {
          /// not signed in
          return Observable.of(null)
        }
      })
      .subscribe(user => {
        this.user.next(user)
      })
  }

}

My User Model

export interface Roles {
  reader:boolean;
  admin?:boolean;
}

export class User {
  id:number;
  admin:boolean;
  activated:boolean;
  usertype:string;
  profile : {
    title:string;
    firstname:string;
    lastname:string;
    gender:string;
    houseNr:string;
    plz:string;
    street:string;
    place:string;
    nation:string;
    email:string;
    companyname:string;
    ustID:string;
    phone:number;
    mobile:number;
    fax:number;
    intPhonePrefix:string;
    intMobilePrefix:string;
    intFaxPrefix:string;
    phonePrefix:string;
    mobilePrefix:string;
    faxPrefix:string;
    bankDepositor:string;
    bankIban:string;
    bankBic:string;
    bankInstitute:string;
  }
  roles: Roles;

  constructor() {
    this.roles = { reader: true }
  }
}

但我在 .switchMap(auth => { 上收到语法错误:

enter image description here

我不知道错误是什么..

1 回答

  • 0

    你必须使用管道 . this.afAuth.authState.pipe( switchMap(data => .... ))

相关问题