★前回の記事
データベースルールファイル(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
の直下のパスは、text
とcompleted
が必須になるようにします(#5)。text
は文字列であるというvalidationを追加します(#6)。実際のプロダクションだと、文字の長さなども定義した方が良いですが、今回は割愛します。completed
は真偽値であるというvalidationを追加します(#7)。text
、completed
以外の値が入らないように、最後に"$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)。 todos
、users
以外の名前で、このパスの下に新しいパスを作れないようにします(#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
反映されました。
★次回の記事
★目次