Firebase Realtime Databaseのセキュリティルールについては、次のルールなどを使用して、パブリックデータとプライベートデータが同じツリーに存在することがあります。Firestoreセキュリティルール
しかし、Firestoreを使用すると、取得できるデータのチャッキングがコレクションまたはドキュメントの下にあるため、同じことをすることはできません。 パブリックとプライベートのデータが同じドキュメントに定義されていて、コレクション/ドキュメントのデータを取得している場合、私たちが所有者でない場合、プライベートデータのパーミッションが不十分であるというエラーが発生します。
RTDBを使用している場合、コレクション/ドキュメントがないため、 'users/{userId}/publicInfo'のデータを取得できます。
FirestoreでRTDBを実行する方法はありますか?それ以外の場合は、公的/私的なコレクションを別々に持っているべきですか?
// rule of Firebase Realtime Database
"users": {
"$user_id": {
".read": "auth.uid === $user_id",
".write": "auth.uid === $user_id",
"private": {
".read": "auth.uid === $user_id" // --- private data
}
"public": {
".read": "auth !== null"; // --- public data
}
}
}
// Firestore
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
match /{private=**} {
allow read, write: if request.auth == userId;
}
match /{public=**} {
allow read, write: if request.auth != null;
}
}
}
}
どうもありがとう:
だから、あなたはおそらく、このようなより多くの何かをしたいです。 Firestoreを理解することで、これらの種類(公開/非公開)のデータを同じドキュメントに置かないようにすることができます。あなたが言ったように、可能な解決策はサブコレクションを持つことですが、これは私たちにドキュメントのキーを持つよう強制しますが、この場合は必要ありません。例えば/ users/{uidxx}/private/{uidyyy}/firstNameなどと同じですが、同じuidは許可されています。コレクションからデータを取得する場合、サブコレクションのデータは含まれていないことに注意してください。 –
新しい文書を作成するときにキー自体を指定することもできます。あなたは/ users/{uidxx}/private_data/private/firstNameを持つことができ、うまくいくでしょう。また、パブリックデータ用の別のコレクションを用意する必要はないかもしれません。親ドキュメントにそのデータを保存することができます。 –
再度、感謝します! –