Firebase angularfire2 - Как вернуть данные только от текущего пользователя? - PullRequest
0 голосов
/ 03 декабря 2018

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

В примере, который я работаю с FirebaseService, показаны только примеры CRUD, где данныевернуло все.

import { Injectable } from "@angular/core";
import { Platform } from 'ionic-angular';
import 'rxjs/add/operator/toPromise';
import { AngularFirestore } from 'angularfire2/firestore';
import * as firebase from 'firebase/app';
import 'firebase/storage';

@Injectable()
export class FirebaseService {

  constructor(
    public afs: AngularFirestore,
    public platform: Platform
  ){}

  getEvents(){
      return new Promise<any>((resolve, reject) => {
        this.afs.collection('/events').snapshotChanges() // add +auth.uid ... or something?
        .subscribe(snapshots => {
          resolve(snapshots)
        })
      })
    }

...

Чтобы вернуть только события пользователя, я думаю Мне нужно добавить:

import { AngularFireAuth } from 'angularfire2/auth';

... и,сделать что-то оттуда.Но я в растерянности.Любая помощь будет принята с благодарностью.Заранее спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Вы можете ограничить это, добавив правила.Например, вы используете / users / node для хранения пользовательской информации.Вы можете ограничить доступ только для вошедшего в систему пользователя, совпадающего с userId, который может получить доступ к / users /

match /databases/{database}/documents {

    function isSignedIn() {
      return request.auth != null;
    }

    function isOwner(userId) {
      return request.auth.uid == userId
    }

    match /users/{userId} {
      allow get: if isSignedIn()
        && isOwner(userId);
     ....
    }

}

Для получения идентификатора пользователя

constructor(
    private afAuth: AngularFireAuth  )

// then
ngOnInit() {

this.afAuth.authState;
    this.afAuth.authState.subscribe(
      user => {
        this.userInfo = user; <-- You can store user Id information to user variable
      },
      err => {
        console.log(err);
      }
}

вы можете использовать this.userInfo.uidсовершать дальнейшие звонки.

...