我试图弄清楚如何将集合限制为仅返回用户数据,而不是每个人的数据。
在我从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';
...,然后从那里开始。但是,我很茫然。任何帮助将不胜感激。预先感谢!
答案 0 :(得分:1)
您可以通过添加规则来限制此限制。例如,您正在使用/ users /节点存储用户信息。您只能限制与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);
....
}
}
获取用户ID
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进行进一步的调用。