我在这里使用Firestore处理Angular应用程序我有预订功能。如果其中一个文档中存在reference_no
,我希望用户公开阅读和写入预订。
以下是我的文档的结构:
这些是我目前的安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /jobs/{job} {
allow read, write: if request.resource.data.property.reference_no == resource.data.property.reference_no;
}
match /{document=**} {
allow read, write: if isSignedInUser();
}
//functions
function isSignedInUser(){
return request.auth.uid != null;
}
}
}
这就是我查询的方式:
findByReferenceNo(reference_no): Observable < any > {
return this.afs
.collection(this.jobsCollection, ref => ref.where('property.reference_no', '==', reference_no))
.snapshotChanges()
.pipe(
map((actions) => {
return actions.map((snapshot) => {
const data = snapshot.payload.doc.data();
const id = snapshot.payload.doc.id;
return {
id,
...data
};
});
})
);
}
但不确定我为什么会这样做:Error: Missing or insufficient permissions.
注意:我在访问时没有登录。
答案 0 :(得分:0)
据我所知,为了保证查询性能,Firestore安全规则会验证您的查询而不是每个单独的文档。这意味着仅当规则可以验证查询不会检索超出允许的数据时才允许查询。
在您当前的模型中,这根本不可能,因为它需要安全规则检查每个单独的文档。有关可以保护的查询的一些示例,请查看Firestore documentation on securing queries。