LoginSignup
7
4

More than 5 years have passed since last update.

Realtime Databaseのルールで指定したKey名のみ許可するやり方

Last updated at Posted at 2017-09-14

初投稿です。
お手柔らかにお願いします。
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の子にはnameagegenderが存在します。
userUidの子のKey名にはnameagegenderのみを許可するようにしたいです。
ただしこの状態だと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ライフを楽しみましょう!
他の方法でもできるよ!って場合はコメントください。

7
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4