我在firestore上设置了以下规则。
service cloud.firestore {
match /databases/{database}/documents {
match /items/{itemid} {
allow read, write: if request.auth.uid == resource.data.owner;
}
}
}
在我的Angular服务中,我按如下方式初始化集合:
constructor(private authService: AuthService, private fs: AngularFirestore) {
this.itemsCollection = this.fs.collection('items', cr => {
return cr.where('owner', '==', authService.currentUserId);
});
}
读取项目的代码:
items() {
return this.itemsCollection.valueChanges();
}
代码写项:
addItem(item: ItemEntry): Observable<DocumentReference> {
item.owner = this.authService.currentUserId;
return Observable.fromPromise(this.itemsCollection.add(item));
}
读取操作正常,但写入操作( addItem )失败并显示错误
缺少权限或权限不足。
无法弄清楚,为什么?
答案 0 :(得分:2)
那是因为resource
变量:
包含存储在文档中的字段和值的映射
resource.data
。
这意味着resource.data
仅包含已存储在数据库中的数据。
您应该使用request.resource
代替。因为它包含写入数据库的数据。您的新规则如下所示:
allow read, write: if request.auth.uid == request.resource.data.owner;