yucatio@システムエンジニア

趣味で作ったものいろいろ

データベースルールファイル(database.rules.json)の変更と反映 (STEP 2 : ユーザ認証を行なって、自分だけが読み込めて書き込めるタスク管理アプリを作成する - React + Redux + Firebase チュートリアル)

★前回の記事

yucatio.hatenablog.com

データベースルールファイル(database.rules.json)を変更します。

todosのルール

STEP 2で作成したアプリでは、ユーザは自分のタスクのみ見れて、自分のタスクにのみ書き込めるので、ルールをそのように変更します。

database.rules.json

{
  "rules": {
    "todos": {
      "$uid": {  // #1
        ".read": "$uid === auth.uid",  // #2
        ".write": "$uid === auth.uid",  // #3
        "$todoId": {  // #4
          ".validate": "newData.hasChildren(['text', 'completed'])",  // #5
          "text": {
            ".validate": "newData.isString()"  // #6
          },
          "completed": {
            ".validate": "newData.isBoolean()"  // #7
          },
          "$other": { ".validate": false }  // #8
        }
      }
    }
  }
}
  • todosの直下のパスを$uidという名前で取得できるようにします(#1)。
  • 読み取りは、$uidと、認証ユーザのuidが同一の場合のみ可能にします(#2)。
  • 書き込みは、$uidと、認証ユーザのuidが同一の場合のみ可能にします(#3)。
  • 各タスクのキーを$todoIdという名前にします(#4)。
  • $todoIdの直下のパスは、textcompletedが必須になるようにします(#5)。
  • textは文字列であるというvalidationを追加します(#6)。実際のプロダクションだと、文字の長さなども定義した方が良いですが、今回は割愛します。
  • completedは真偽値であるというvalidationを追加します(#7)。
  • textcompleted以外の値が入らないように、最後に"$other": { ".validate": false }を追加します(#8)。

usersのルール

usersのデータは今回は使用しないので、簡単に定義して起きます。

database.rules.json

{
  "rules": {
    // 中略
    "users": {
      "$uid": {  // #1
        ".read": true,  // #2
        ".write": "$uid === auth.uid"  // #3
      }
    },
    "$other": { ".validate": false }  // #4
  }
}
  • todosの方と同様に、users直下のパスを$uidで読み取れるようにします(#1)。
  • 読み取りはtrueにします(#2)。
  • 書き込みは、uidと、認証ユーザのuidが同一の場合のみ可能にします(#3)。
  • todosusers以外の名前で、このパスの下に新しいパスを作れないようにします(#4)。

データベースルールのFirebaseへの反映

ルールをFirebaseに反映します。

$ firebase deploy --only database

=== Deploying to 'todo-sample-xxxxx’…

i  deploying database
i  database: checking rules syntax...
✔  database: rules syntax for database todo-sample-xxxxx is valid
i  database: releasing rules...
✔  database: rules for database todo-sample-xxxxx released successfully

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/todo-sample-xxxxx/overview

反映されました。

★次回の記事

yucatio.hatenablog.com

★目次

yucatio.hatenablog.com