Javaエンジニア、React+Firebaseでアプリを作る

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

Firestoreで数値の範囲を制限するセキュリティルール

Firestoreのセキュリティルールで数値の範囲を制限することができます。悪意のあるユーザにより思わぬ値を登録されてしまい、誤動作を起こすことを防げます。

フィールドの大小比較を使う

数値の範囲を指定するには、フィールドの値を大小比較します。 例えば、"age"(年齢)フィールドを18以上65以下に制限するには以下のように記述します。

allow create, update: if request.resource.data.age >= 18 &&
                         request.resource.data.age <= 65

数値の範囲の使用例

例として参加登録フォームを作ってみます。

f:id:yucatio:20211024160316p:plain:w300

データ構造はこのようになっています。

f:id:yucatio:20211024172031p:plain

年齢を必須かつ18以上65以下という条件を、セキュリティルールで書くとこのようになります。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /applications/{application} {
      function validApplication(docData) {
        return docData.age is int && 
               docData.age >= 18 &&
               docData.age <= 65;
      }
      allow create, update: if validApplication(request.resource.data)
    }
  }
}

18歳で登録してみます。

f:id:yucatio:20211024161032p:plain:w300

Firebaseのコンソールで確認すると登録されていることが分かります。

f:id:yucatio:20211024164702p:plain

-(マイナス)30歳で登録してみると、エラーになり、コンソールを確認すると登録されていないことが分かります。

f:id:yucatio:20211024163343p:plain:w300

f:id:yucatio:20211017172609p:plain

以上でFirestoreのセキュリティルールで数値の範囲を制限することができました。