初投稿です。
お手柔らかにお願いします。
Realtime Databaseのルールで指定したKey名のみ許可するやり方を紹介します。
意図しないKeyが追加される可能性のあるルール
以下にRealtime Databaseのルールがあります。
※バリデーションの確認なので全ての権限を許可しています。
{
"rules": {
".read": true,
".write": true,
"users": {
"$userUid": {
".validate": "newData.hasChildren(['name','age','gender'])",
"name": { ".validate": "newData.isString()" },
"age": { ".validate": "newData.isNumber()" },
"gender": { ".validate": "newData.isString()" }
}
}
}
}
userUid
の子にはname
とage
とgender
が存在します。
userUid
の子のKey名にはname
とage
とgender
のみを許可するようにしたいです。
ただしこの状態だとuserUid
の子にhobby
などを追加できてしまいます。
ではどうするのが良いのか?
この場合は以下の通りにルールを追加します。
{
"rules": {
".read": true,
".write": true,
"users": {
"$userUid": {
".validate": "newData.hasChildren(['name','age','gender'])",
"$other": { ".validate": false },
"name": { ".validate": "newData.isString()" },
"age": { ".validate": "newData.isNumber()" },
"gender": { ".validate": "newData.isString()" }
}
}
}
}
$other
が作成された時、常にバリデーションがfalseになるためエラーになります。
これでhobby
を作成しようとしてもエラーとなります。
より安全なバリデーションを構築してFirebaseライフを楽しみましょう!
他の方法でもできるよ!って場合はコメントください。