未分類

firebaseのError: Missing or insufficient permissions.の解決策

firestoreのデータをdeleteしようとしたら、上記のエラーが出てきた。

原因は、セキュリティルールの設定に誤りがあったこと。

誤→

allow write: if request.resource.data.user_id == request.auth.uid;

これは、クライアント側からリクエストしたオブジェクトのユーザIDと、現在ログインしているユーザのユーザIDが一致した場合に書き込みを許可している。

たぶん、deleteの場合はリクエストするオブジェクトがないからかも。

正→

allow create, update: if request.resource.data.user_id == request.auth.uid;
allow delete: if request.auth.uid == resource.data.user_id;

データの登録と更新の場合は、上記の設定を引き継ぐ。

ただし、deleteする場合は、現在ログインしているユーザのユーザIDが、削除対象となっているドキュメントのユーザIDと一致している場合のみ削除を許可する。

つまり、自分(ログインユーザ)が登録した記事のみ削除できる設定とした。

これで、Missing or insufficient permissions.エラーは解決。

ちなみに、resource変数を使うことで、DBにすでに存在するデータにアクセスできる。

resource 変数は request.resource 変数と似ていますが、データベースにすでに存在するドキュメントを参照する点が異なります。読み取りオペレーションの場合は読み取るドキュメント、書き込みオペレーションの場合は更新または変更する古いドキュメントを参照します。

参考

https://firebase.google.com/docs/firestore/security/secure-data?hl=ja