我正在用AngularJS構建一個簡單的Firebase應用程序。這個應用程序通過谷歌認證用戶。每個用戶都有一個書目清單。任何人都可以看書,即使他們沒有被認證。只有一本書的創建者才能編輯它。然而,即使其他人添加了書籍,個人用戶也需要能夠記錄他們已經閱讀過書籍。瞭解Firebase關於用戶寫入,全局讀取的規則
我有rules.json
像這樣:
{
"rules": {
".read": false,
".write": false,
"book": {
"$uid": {
".write": "auth !== null && auth.uid === $uid",
}
".read": true,
}
}
}
,我試圖用簡單的寫了一本書:
$firebaseArray(new Firebase(URL + "/book")).$add({foo: "bar"})
我在嘗試這樣做,雖然我當拒絕「權限」錯誤似乎能夠在Forge中手動創建的圖書read
。
我也認爲存儲讀者的最佳方式是使其成爲本書的一個屬性(登錄讀取器的一組$uid
)。 ".write"
好像會阻止這個,所以我該怎麼做?
"$uid": {
".write": "auth !== null && auth.uid === $uid",
"readers": {
".write": "auth !== null"
}
},
這似乎是一個驗證規則是適當的在這裏也...像newData.val() == auth.uid
,但我不知道如何驗證readers
應該是一個數組(或專門一組)這些值。
據我看到你的'.read'規則是正確的,因爲你的'ref'是'/ book'節點。但是我不明白你想要'.write'的功能。請注意,'$ add'會生成一個所謂的push-id,它與'$ uid'不一樣。看起來你更有可能擁有'/ book/$ bookid', 'creator'具有創作者的「uid」。然後,您可以將'book/$ bookid/.write'設置爲'auth!= null &&(!data.exists()|| auth.uid == data.child('creator')。val())''。 –
@FrankvanPuffelen是''$ bookid「'不同於'」$ uid「'?我應該創建一個像「book/$ bookid」或嵌套的「book」和「$ bookid」''''$ uid「'規則的規則(或者沒關係) –
任何以' $'只是一個變量,它可以有任何名稱。但'$ uid'通常用於「user id」節點,所以由'auth.uid'標識的節點。由於您正在通過'$ add'添加書籍,因此它們通過推送ID進行標識。 –