おそらく、私はSQLのような観点からこの問題に取り組んでいるかもしれませんが、どの子ノードにノードを設定するのを適切に制限するかを理解するのに困っています。"Firebugデータベースのルールをすべてキャッチ"
私は任意の名前の製品の記録を残したいとします。各商品にはprice
が含まれている必要がありますが、それ以外は許可されません。
私の素朴なアプローチはややswitch文のdefault句のように(明示的に$other
ノードをprice
ノードへの書き込みアクセスを許可し、すべてのアクセスを削除し、price
子を含むようにあるnewDataを必要とする製品に.validate
ルールを追加しました):
{
"rules": {
"$product": {
".read": true,
".write": true,
".validate": "newData.hasChildren(['price'])",
"price": {
".write": true,
".validate": "newData.isNumber()"
},
"$other": {
".read.": false,
".write": false,
}
}
}
}
これは機能しません。 {"price": 1234, "foo": "bar"}
の新製品を追加することは引き続き受け付けます。 しかし、(何とか間違っていました)$other
に".validate": false
ルールを追加した場合は、何も代わりません({"price": 1234}
は許可されません)。
私はここで何をしようとしているのと同様の方法を実装する方法はありますか?そうでない場合、Firebaseのデータ構造を制限する適切な方法は何ですか?私はまったくそれをするべきですか?私は、データベースをゴミ箱に詰め込まないようにするにはどうしたらいいですか?
私は従わわからない、なぜ '「$その他」:{「.validate」:偽}'あなたが望むものではありません。ただし、それを無視して、一度許可されたパーミッションを取り消すことはできません。 '$ product'の' .write ":trueは' $ other'の '.write":false'を無視していますか? – cartant
@cartantなぜ検証が機能しないのかを明確にするために質問を更新しました。 –