2017-10-10 50 views
7

我目前正在嘗試在firebase上構建一個小應用程序,作爲對它的評估。 它看起來很有趣並且超級高效,但是我有一個與Firestore規則有關的問題。Firestore自我閱讀規則

我有一個集合(遊戲)與看起來像這樣的對象:

{ 
    "name":String, 
    "description":String, 
    "owners": 
    { 
     "uid": String 
     "uid2": String 
    } 
} 

和規則設置是這樣的:

service cloud.firestore { 
    match /databases/{database}/documents { 
     match /games { 
      match /{game} { 
       allow write: if request.auth != null && request.resource.data.owners[request.auth.uid] == 'ADMIN'; 
       allow update: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN'; 
       allow read: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN'; 
      } 
     } 
    } 
} 

而寫,更新做工精細。只能讀取單個文檔。 當我嘗試讀取集合時,出現訪問錯誤,就好像用戶沒有權限一樣。這使得它不工作的部分是

resource.data.owners[request.auth.uid] == 'ADMIN'. 

添加where("owners."+auth.uid,"==", 'ADMIN')來收集查詢也沒有幫助。

我在這裏做錯了什麼? Firebase Firestore中是否存在針對類似場景的建議方法?

編輯: 我嘗試添加 '得到' 和 '名單' 的規則是這樣的:

allow list: if request.auth != null;

allow get: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';

如預期它沒有工作。我希望它允許我列出文件與where,但如果有文件,我不能get我希望得到「缺少或不足的權限。」我能做的是列出所有文檔,但沒有直接讀取其中的一部分(get規則在嘗試獲取單個文檔時有效,但在從集合中列出時不適用)。

編輯2:看起來像根據@MikeMcDonald我的期望是正確的,但它目前被竊聽。等待修復。

編輯3:現在工作的罰款與規則獲取和列表以這種方式設置:

allow get, list: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';

+1

請注意,'write'是'update'的超集,所以您當前的'write'規則會覆蓋'update'。將其更改爲「創建」,您會更接近您的預期目標。 –

+0

@MikeMcDonald謝謝,我會這樣做的。我還發現(在仔細閱讀後)有兩個「讀數」。 'get'和'list'稍後我會嘗試允許更廣泛的列表,也許它是我需要的東西。謝謝! – Monku

+1

'read'是包含'get'和'list'的傘。我已經確認上述是一個錯誤 - 它應該可以工作,但我們在這裏沒有正確處理陣列成員。一旦修復失敗,我會在這裏跟進。 –

回答

0

我想創建和更新工作,因爲他們寫的一部分,條件1覆蓋它。