簡體   English   中英

Firestore 權限; 檢查用戶是否在數組中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM