【问题标题】:Firebase how check path contains value and allow read and write other pathFirebase如何检查路径包含值并允许读写其他路径
【发布时间】:2021-12-07 05:21:24
【问题描述】:

目前,我尝试与 google firebase 一起构建 聊天。 现在我希望我的数据库更安全。 这意味着只有 聊天中的用户 (room_3) 可以读取和写入数据数据。

是否可以检查路径是否包含用户值 如果用户值包含允许读取其他路径?

这是我的数据库结构:

/chat/product_id/product_id_12345/chat_room_id/room_1/message_1/message2...

我的想法是在“room_1”中添加用户 ID。 然后我检查用户是否包含在“room_1”中。 如果用户包含我允许读取和写入数据的完整路径(message_1/message_2...)。

这是我的例子:

如果您有任何问题,请随时问我。 非常感谢。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore firebase-security


    【解决方案1】:

    messages 子集合的安全规则中,您可以read the parent document 并检查当前用户是否在user_id 字段中:

    ...
    match /messages/{message} {
      allow read: 
        if request.auth != null && 
           request.auth.uid in 
             get(/databases/$(database)/documents/chat_room/$(chat_room_id)).data.user_id
    }
    

    【讨论】:

    • 非常感谢。这是一个不错且快速的解决方案:D
    • 你好@Frank,我对这张票还有其他问题。我现在已经实施了 Firebase 规则。现在我想读取数据。我的问题是如何从我的子集合中获取所有数据。例如,如果用户写了一条消息,我会创建一个新的集合“消息”。这些按摩师很依偎。有没有办法在没有集合组的情况下获取所有子集合?多谢
    • 如果您询问如何允许用户从子集合中读取数据,那就是recursive wildcard (match /messages/{message=**})。如果您在读取父级时询问是否可以获取所有子集合,那是不可能的:Firestore 中的读取很浅。通常对对话中的所有消息都有一个子集合,并通过每条消息中的字段来处理其中的任何线程层次结构——而不是更多的嵌套集合。
    • 好的,这对我有很大帮助。非常感谢:D
    猜你喜欢
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多