如何为Firestore中的每个用户自定义文档



我有一个Firestore数据库,它必须包含很多故事,所以有很多文档,这些故事必须由用户自己编写。如何在文档和用户之间进行链接?我知道每个文档都有一个唯一的ID,用户也是如此,因为我使用Firebase身份验证,但现在我尝试为每个用户制作文档,这样他们中的每个人都可以只对自己的文档进行写入和编辑。当他们点击";我的故事;例如,在应用程序中,只有他/她的故事才会显示。

usersstories可以有单独的集合。在stories集合中的每个文档中,确保您拥有创建该文档的用户的UID(来自Firebase Auth(。

因此,故事文档可能看起来像:

{
storyID: "",
userID: "userUID"
...restOfTheFields
}

要获取特定用户的故事,可以运行以下查询:

db.collection("stories")
.whereEqualTo("userID", uidOfCurrentUser)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});

通过这种方式,您还可以获得该用户所有故事的文档ID。

为了确保用户只能阅读自己的故事,您可以设置以下安全规则:

match /stories/{storyId} {
allow read, update, delete: if request.auth != null && resource.data.userID == request.auth.uid;
}

或者,您可以使用子集合,但如果任何一天您需要根据故事ID查询故事,而您不知道用户ID,那么拥有顶级集合会有所帮助。

将故事存储在用户docsubcollection

{
id:<autogenerated / authid>
name: author_name
stories: <subcollection>
}

这样,您就可以基于作者id查询subcollection文档,并执行读取/更新等操作,而无需担心其他作者的故事。

请注意,firestore查询本质上是肤浅的,这意味着当您获取作者doc时,将不包括子集合。您需要单独获取subcollection

最新更新