私は、Googleを介して認証されたユーザーが「ソーシャル」機能のない自分のデータにのみアクセスできるように設計されたアプリを持っています。以下の基準のセキュリティルールを知りたい。
5つのコレクションがあり、そのうちの1つが「todos」と呼ばれ、認証されたユーザーuidのフィールドがあるという点で、データが他のコレクションをミラーリングするとします。典型的なドキュメントは次のようになります。
Todos
todo:{
title:"some titled",
body:"we are the world , we are the children",
uid:"2378y4c2378rdt2387btyc23r7y"
}
他のいくつかのコレクション
thing:{
name:"some name",
content:"Some content",
whatever:"whu-eva",
uid:"2378y4c2378rdt2387btyc23r7y"
}
認証されたGoogleユーザーが、uidフィールドにユーザーuidと言ったデータをCRUDできるようにしたい。ログインしているユーザーが他のすべてのデータにアクセスできないようにしたい。
このシナリオのルールを作成する方法を知りたい。
今、ドキュメントを検討していますが、質問することで時間を節約できるかもしれません。アプリに特定の役割はありません。 https://firebase.google.com/docs/firestore/solutions/role-based-access
補足として、認証されたGoogleユーザーのuidを、ログイン中に作成されたドキュメントに自動的にバインドする機能はFirebaseにありますか? (私は答えがノーであると想定しており、私は自分のアプリでuidを手動で取得し、ドキュメントを作成する前にクライアントでそれを設定することを計画していました)。
ありがとうございました。
更新
Klugjoが以下に投稿したコードを使用してみました。
シミュレータでテストしようとすると、エラーが発生します。
これが私のコレクションとエラーのスクリーンショットです。
私が読んだすべてに基づいて、次のコードは機能するようです-しかし、機能しません。この投稿の上部にあるオブジェクトデータに記述されている「uid」の代わりに「userId」というキーを補足しました。 uidと区別するためにキーを変更しました。
service cloud.firestore {
match /databases/{database}/documents {
match /todos/{id} {
allow read: if request.auth.uid == request.resource.data.userId;
allow create, update, delete:
if request.resource.data.userId == request.auth.uid;
}
}
}
ドキュメントを取得および作成しようとするビデオを作成しました。テスト機能を正しく使用しているとは思いません。
ビデオ
https://www.youtube.com/watch?v=W7GZNxmBCBo&feature=youtu.be
[〜#〜]編集[〜#〜]
ハードコードされたrequest.auth.uid
を使用してテストすると、問題なく機能します。下の画像では、「テスト」をrequest.auth.uid
としてハードコーディングしています。
私の問題は、この情報をハードコーディングせずにルールエディターでテストする方法を知りたいということです。
編集
これは、実際のアプリを使用した問題のビデオデモです。
https://www.youtube.com/watch?v=J8qctcpKd4Y&feature=youtu.be
あなたはこのようなものを探しています
service.cloud.firestore {
match /databases/{database}/documents {
match /todos/{userId} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
match /todos/{userId}
は、ルール条件でuserId
変数を使用できるようにします
request.auth.uid
は認証されたユーザーに一致しますuid