2017-10-10 65 views
1

我試圖根據字段查詢文檔。Firestore數據庫規則:查詢的權限

因爲這個領域我有權限讀取這個文件:如果我試圖擷取此文件

match /lists/{list=**} { 
    allow read: if resource.data.name == 'MyDocument' 
} 

直接是成功的(使用科特林Android客戶端):

val doc = db.document("lists/acaa0247-eccd-4ff0-b986-7f8b6187e45f") 
doc.get().addOnCompleteListener { task -> 
      if (task.isSuccessful) { 
       // here it works 
       println("This Works") 
      } else { 
       println("Failed") 
      } 
     } 

但是當我查詢它(或只是試圖獲取集合中的所有文檔)時,我會得到一個拒絕例外的許可:

val collection = db.collection("lists") 
collection.get().addOnCompleteListener(activity, { task -> 
      if (task.isSuccessful) { 
       println("Should work") 
      } else { 
       // Here is isn't working 
       println("Failed") 
      } 
     }) 

此查詢的工作時,我讓大家窮究/lists下:

match /lists/{list=**} { 
    allow read: if request.auth != null 
} 

所以我的問題是:是否用戶無需讀取其上搜索查詢中的所有文件訪問? 在我的情況下,這將意味着在/lists所有字段的所有文件?

回答

1

所以我的問題是:用戶是否需要閱讀訪問在查詢中搜索的所有文檔?

是的。

爲了避免在查詢列表時出現錯誤,在客戶端上可以使用where子句僅讀取您有權讀取的文檔。

+1

所以當使用'collection.whereEqualTo(「name」,「MyDocument」)。get()'它應該工作嗎?剛剛嘗試過,我也得到了拒絕例外的權限。 –

+0

是激動人心的。然後你將創建一個索引,並在安全規則中確保用戶實際上有權訪問。 – DauleDK

+0

Btw @MarcelBochtler - 在此處查詢查詢語法:https://firebase.google.com/docs/firestore/query-data/queries – DauleDK