Мне нужно получить данные из пожарного хранилища, используя uid пользователя, потому что я храню данные (детали) по следующему пути в пожарном хранилище: drills / [user.uid] / userDrills / [drill.id]
Iреализовано хранение данных с помощью uid, потому что я хотел, чтобы каждый пользователь имел доступ только к своим данным (упражнения).До того, как я это реализовал, у меня был один файл службы детализации, который содержал все методы CRUD для firestore, однако я не смог вовремя получить идентификатор пользователя из состояния auth, чтобы вставить его в запрос.Даже получение идентификатора пользователя в конструкторе сервиса не сработало.
Мое решение на данный момент - не использовать сервис.Это означает, что мне нужно получить пользовательский uid в трех разных компонентах (список, редактирование / удаление и новый) ...
У кого-нибудь есть решение для этого?Есть ли лучший способ получить UID, а затем выполнить запрос?Если нет, то будет ли лучшим решением просто управлять правами пользователей в firestore путем создания правил?
import { Component, OnInit } from '@angular/core';
import {Observable} from 'rxjs';
import { map } from 'rxjs/operators';
import {AngularFireAuth} from "@angular/fire/auth";
import {AngularFirestore, AngularFirestoreCollection} from
"@angular/fire/firestore";
import {Drill} from "../drill.model";
@Component({
selector: 'app-drill-list',
templateUrl: './drill-list.component.html',
styleUrls: ['./drill-list.component.css']
})
export class DrillListComponent implements OnInit {
drills: Observable<any[]>;
drillsCollection: AngularFirestoreCollection<Drill>;
userId: any;
constructor(private afAuth: AngularFireAuth,
private afs: AngularFirestore) { }
ngOnInit() {
this.afAuth.authState
.subscribe((data) => {
this.userId = data.uid;
this.drillsCollection = this.afs.collection('drills/' + this.userId + '/userDrills',
ref => ref.orderBy('title', 'asc'));
this.drills = this.getDrills();
});
}
getDrills(): Observable<Drill[]> {
return this.drillsCollection.snapshotChanges().pipe(map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Drill;
const id = a.payload.doc.id;
return { id, ...data};
});
}));
}
}