🦦

【Firestore DB】The caller does not have permission~.エラー解決方法【Flutter】

2025/03/16に公開

こんにちは。
先日、開発途中のFlutterアプリからFirestore DBへ更新操作をリクエストしたところ、以下のエラーが出ました。

flutter: Error saving data: [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.

「指定の操作を実行するための権限がないため、データをセーブできません」とのことです。
今回はこのエラーの解決方法を記載していきます。
Firestore DBのアクセス制御ルールがデフォルトのままで、特に変えてないという人に参考になるかもしれません。

The caller does not have permissionの解決方法

権限まわりはFirestoreコンソールを見にいきます。

  1. Firebaseコンソールを開く

  2. Firestore Databaseを開く

  3. ルールタブを開く

  4. コード16行目のallow文を確認する

    allow read, write: if request.time < timestamp.date(2024, 11, 10);
    

    allowに続く部分が、DBの操作条件の指定箇所になってます。
    ちなみにこの内容は、ほとんどデフォルトのままです。
    この条件だと「読み書きのリクエストを2024/11/9まで許可」なので、それ以降の日付だと弾かれるわけです。

  5. 条件を変更する
    リクエスト日付の許容条件を変えてみます。
    現在2025年なので2030年あたりに変更してみました。

    allow read, write: if request.time < timestamp.date(2030, 12, 31);
    
  6. 公開する
    最後に、公開ボタンを押下して反映します。

    以上です。
    これで、もう一度アプリを確認してみます。
    デバッグ上のエラーが解消され、アプリからFirestore DBへの読み書きが可能になりました。

まとめ:ルールは仕様に沿って適切に設定したい

アプリによっては認証を実装して、auth条件を加える場合もあると思います。
セキュリティ面でかなり重要なので、開発時は仕様に沿って適切に条件を設定したいですね。
勉強になりました。

Discussion