当初以下のように設定していました。これならエラーは出ないのですが、match /{document=**} の部分ですべてのドキュメントのreadを許可しているので脆弱だというメッセージをもらい、変更を検討。
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read : if true } match /users/{usersID} { allow write: if request.auth.uid == usersID } match /posts/{postsID} { allow write: if 'users/' + request.auth.uid != request.resource.data.user_id } } }
そこでいったん以下のように変更しましたが、エラーとなりクライアント側からアクセスできなくなりました。
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{usersID} { allow read ; allow write: if request.auth.uid == usersID } match /posts/{postsID} { allow read ; allow write: if 'users/' + request.auth.uid != request.resource.data.user_id } } }
Uncaught (in promise) FirebaseError: Missing or insufficient permissions.
両者の設定でやっていることは同じに思えるので、エラーの理由が不明です。
詳しい方、思い当たる原因を教えていただけますでしょうか。
/users, /posts 以外のdocumentを読みに行っている箇所がある可能性はありますか?
上記の例は簡略化していますが、users, posts 以外にもdocumentがひとつあり、そこにも同様に
```allow read : if true```
を入れています。
すべてのdocumentに対してルールを設定していない場合、エラーになるのでしょうか?
であれば問題ないと思います。DBコネクション作成時などではなく、パーミッションのない場所へのアクセス時に起こるはずです。
Missing or insufficient permissionsの他にエラーメッセージで対象のパスが表示されていた気がしますがどうですか?
エラーメッセージを確認していたのですが、あまり手がかりになりそうな部分がなく、、
たとえばこちらなどから推測できる部分はありますでしょうか?
at processTicksAndRejections (node:internal/process/task_queues:93:5) {
code: 'permission-denied',
toString: [Function (anonymous)]
}
あなたの回答
tips
プレビュー