LoginSignup
7
1

More than 1 year has passed since last update.

「[cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.」エラーの解決方法

Last updated at Posted at 2023-02-06

はじめに

Flutterエンジニアとして修行中のあんりと申します!
現在入っているプロジェクトで、Firebaseのセキュリティルールに関するエラーに遭遇し、勉強をしたので、アウトプットも兼ねて記事を書くことにしました🚀

今回起こった問題

  • Firestoreの、qrsコレクションのフィールドの値を更新するため、下記のコードを書き、実行したら処理途中で落ちてエラーが吐かれる。

 ↓ 実行したいコード

// qrsコレクションのgroupNameを更新する
  Future<void> updateQrInfoGroupName(String groupName) async {
    final qrNumber = await fetchQrNumberString();
    final docRef = qrsReference.doc(qrNumber);

    // ここで落ちてエラーが吐かれる
    await docRef.update({'groupName': groupName});
  }

 ↓ 吐かれるエラー

[cloud_firestore/permission-denied]The caller does not have permission to execute the specified operation.

エラーの原因調査

  • 「Storage」のセキュリティルールが下記のようになっていることを確認。
    スクリーンショット 2023-02-01 19.51.27 (1).png

  • 一番下の行について
    allow read, write: if request.auth != null;
    →「authにログインしてなければ読み書きできない(=authでログインしてれば読み書き可能)」という内容で書かれている。
    ただ、authでログインをしている状態でアプリを動かしているので、エラーが出る謎が深まる。

エラーの原因となってたセキュリティルールは、「Firestore Database」の方にあった!

  • 「Storage」ではなく「Firestore Database」のセキュリティールールを確認!
      スクリーンショット 2023-02-04 17.53.55.png

  •  この中の、qrsコレクションへのセキュリティルールの箇所 ↓

    match /qrs/{gr} {
    // authでログインしてればドキュメント作成と、データ取得は可能
    allow read, create: if request.auth != null;
      // updateとdelete(削除や更新)は許可されていない
    allow update, delete: if false;
    }
    

  ここでupdateが許可されていないのが原因だった!  
  なので、updateを許可するように修正が必要。

解決 - セキュリティールールを修正・公開

  1. updateの場所を下記のように変更
      match /qrs/{gr} {
        allow read, create, update: if request.auth != null;
        allow delete: if false;
      }
    
  2. 下記を参考にしてルールプレイグラウンドでテスト
    https://firebase.google.com/docs/rules/simulator?hl=ja
  3. テスト実行 →「シミュレートされた読み取りが許可されました」と出て、テスト成功
  4. 「公開」で修正後のセキュリティルールを反映
  5. 反映後、シミュレーターを動すと、エラー吐かずに無事にフィールドの値が更新できた!

    解決🎉🎉

おわりに

まだ知識と経験が浅いため、誤った箇所などありましたら、ご意見やご指摘などいただけたら幸いです!
そしてもしこの記事がどなたかのお役に立てたら嬉しいです!
読んでいただきありがとうございました!🙇‍♀️

7
1
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
1