2017-10-17 179 views
0

我通過官方doc瞭解安全規則,但無法使其工作。Firebase Firestore規則,只讀文檔包含特定值時

在我的收藏users在文檔user下有一些地圖值,其中之一是role: "guest"。角色值可以"guest" or "superAdmin"

我希望獲得/users只有當role == "superAdmin"

這裏就是我想

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /users/{userId} { 
     allow read: if get(/databases/$(database)/documents/users/$(userId)).data.role == "superAdmin"; 
    } 
    } 
} 

,並得到了錯誤,當我爲superAdmin

ERROR Error: Missing or insufficient permissions.

登錄我相信我正確地遵循了文檔。並在SO中發現了一個類似的問題,其中說明了某些特定於評估查詢中嵌套字段的錯誤。但我沒有嵌套查詢。我在這裏做錯了什麼?

這裏是我公司的FireStore看

enter image description here

請幫助。

+0

看起來像一個在firestore中的錯誤,它仍處於測試階段。找到了一個替代解決方案[這裏](https://stackoverflow.com/questions/46629170/firestore-security-rule-get-not-work)。等待正確的答案。 – Hareesh

回答

1

而不是使用get()的,因爲你在你從讀取位置讀取該文件,只需使用resource(這是在該位置的預讀文件)解決這個問題:

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /users/{userId} { 
     allow read: if resource.data.role == "superAdmin"; 
    } 
    } 
} 

只有使用get()如果你要去一個不同的集合來獲取數據。

0

我認爲打破它的部分是allow read: if get(/databases/$(database)/documents/users/$(userId))。在這裏,您比較文檔的所有者,而不是請求文檔的所有者。嘗試用request.auth.uid代替userID

+0

你說得對。我試了一下,等了10分鐘,但不幸的是同樣的錯誤。 '如果得到(/數據庫/ $(數據庫)/文件/用戶/ $(request.auth.uid))。data.role ==「superAdmin」'是否正確? – Hareesh

相關問題