[英]Firestore permissions; checking if a user is in an array
在 Cloud Firestore 中,我有一組文檔,其中包含一個數組字段,其中包含應該對該文檔具有讀取權限的所有用戶。 我的簡化安全規則是:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /collection_name/{document=**} {
allow read: if request.auth.uid in request.resource.data.listOfIds.toSet();
}
}
}
一個示例簡化文檔是:
{
listOfIds: ["uid1", "uid2"]
}
使用規則模擬器執行獲取,按預期讀取工作。 但是,使用 Android API 執行類似的查詢會返回權限被拒絕錯誤。 我想我以與規則相同的方式限制我的查詢(這是 Firestore 的要求;它不會過濾掉用戶無法為您閱讀的文檔)。
firestoreClient.collection("collection_name")
.whereArrayContains("listOfIds", firebaseUid)
.get()
.addOnCompleteListener(...);
事實證明,Firestore 認為查詢沒有正確地限制在定義的讀取權限內。 是.toSet()
把它扔掉了。 刪除它會導致我預期的行為。
為什么我有.toSet()
開始? 我錯誤地認為將數組轉換為集合是使用in
運算符的必要條件。 該運算符適用於列表和集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.