所以我有一個要查詢的集合,但我沒有查看所有檔案的權限。如果只有我查詢的檔案之一被阻止,我可以進行不會失敗的查詢嗎?或者我是否需要先進行預處理以清理文章 ID?
firebase
.firestore()
.collection("articles")
.where(firebase.firestore.FieldPath.documentId(), "in", articleIds)
.get()
.then((results) =>
results.docs
.map((result) => console.log(result.data()))
)
所以如果articleIds = [1, 2, 3, 4, 5],那么一切都很好,因為我有權限查看那些文章,并且呼叫成功。但是,如果articleIds=[1, 2, 3, 4, 100],則呼叫失敗,因為我沒有查看文章100的權限。
那么,即使我沒有權限,有沒有辦法讓這個呼叫成功?
uj5u.com熱心網友回復:
您沒有指定授予您訪問檔案 1-5 并拒絕您訪問 100的安全規則。(檔案)說您需要構造您的查詢,使其符合安全規則。這意味著即使您確實有權訪問檔案 [1, 2, 3, 4, 5] 查詢也會失敗,除非您的安全規則取決于該 ID。
即使當前用戶實際上是每個故事檔案的作者,查詢也會失敗。這種行為的原因是,當 Cloud Firestore 應用您的安全規則時,它會根據其潛在結果集而不是資料庫中檔案的實際屬性來評估查詢。如果查詢可能包含違反安全規則的檔案,則查詢將失敗。
db.collection("stories").where("author", "==", user.uid).get()
這會成功,因為安全規則根據作者授予對故事的讀取訪問權限,這是您查詢的一部分。頁面上的另一個示例:
match /mydocuments/{doc} {
allow read: if resource.data.x > 5;
}
此查詢失敗,因為它可能回傳 x <= 5 的檔案,即使 ids 1 和 3 不存在:
db.collection("mydocuments").where("x", "in", [1, 3, 6, 42, 99]).get()
但這成功了,因為所有查詢的檔案都通過了規則:
db.collection("mydocuments").where("x", "in", [6, 42, 99, 105, 200]).get()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/346690.html
標籤:javascript 火力基地 谷歌云firestore
