$ addedByUserは、この例では、間違った場所にある可能性があります。これはFirebase docsから持ち上げられる
"items": {
"$item": {
".read": "data.child('addedByUser').val() === auth.uid"
}
}
:私はあなたの線に沿って何かを探しているだろうと(これをテストしたではない)ことをお勧め
データで:
{
"messages": {
"message0": {
"content": "Hello",
"timestamp": 1405704370369
},
"message1": {
"content": "Goodbye",
"timestamp": 1405704395231
},
...
}
}
ルールは、次のようになります。
} }
これは間違ったユーザーが他の人の(単数の)アイテムを読むのを防ぎ、あなたの例ではユーザーSZ825V ...が "items/-KKTDD ..."の読み取りを実行しないようにしますが、ユーザーSZ825V 「アイテム」の読み込みを実行するには、ユーザーが自分のドキュメントや他の人のドキュメントを読み込もうとしているため、読み込みが完全に失敗します。これはルールが原子的に振る舞うfirebaseの重要な概念です。つまり、読み取りの一部が失敗した場合、読み取り全体が失敗します。これを置く別の方法は、ルールがフィルタとして機能しないということです。 これが探している機能の場合は、構造を並べ替える必要があります。
{
"users": {
"abcdef-user-id": {
"items": {
"fjeiwofjewio": {
"name": "apple",
"qty": "23"
}
}
},
"ghijkl-user-id": {
"items": {
"regrewgreh": {
"name": "passionfruit",
"qty": "18"
}
}
}
}
とセキュリティルールは次のようになります。次のように例が考えられ
.. {
"users": {
"$userId": {
".read": "auth.uid === $userId"
}
}
}
上記のアプローチは、あなただけの、ユーザー独自のデータツリー内の項目を読み取るために、ユーザーをできるようにしたいと仮定しています誰も他のユーザーのアイテムを見ることはできないだろう。他のユーザーに他のユーザーのアイテムの一部を表示させたい場合は、もう一度別の方法を実行する必要があります。これは別の問題です。
私は最初の失敗が見つかりました。 「.readと.writeのルールはトップダウンで動作し、より浅いルールはより深いルールをオーバーライドします」はhttps://firebase.googleで説明されています。(スナップショット) var newItems = [Item]() snapshot.childrenの項目には、次のものがあります。com/docs/database/security/securing-data#read_and_write_rules_cascade –