聊天功能的Firebase规则

时间:2016-11-17 14:28:40

标签: firebase firebase-realtime-database firebase-security

在我的项目中,我有一个聊天功能,允许用户通过私信发言。目前它只是一对一的,但稍后可以改进,以便进行小组讨论。

目前我正在努力使用自定义规则。实际上,对于我的项目,我需要用户拥有他们自己的讨论列表。例如,用户A和B通过私人消息进行通话,但用户C,D或其他任何内容都无法阅读讨论。

以下是数据库json的外观:

{
"room-messages": {
    "-KWgoXt567vzgxZ-1gii": {
        "-KWgoXt567vzgxZ-1gii": {
            "name": "Friendly Chat",
            "sent": 1479294463723,
            "text": "Nice ! You have created a new chat",
            "uid": "user_A_id"
        },
        "-KWh5_W12qsXFaJhyOvx": {
            "name": "Lucien Guimaraes",
            "sent": 1479294463728,
            "text": "A text message",
            "uid": "user_B_id"
        }
    },
    "-KWgoXt567vzgxZ-1git": {
        "-KWgoXt567vzgxZ-1git": {
            "name": "Friendly Chat",
            "sent": 1479294463723,
            "text": "Nice ! You have created a new chat (2)",
            "uid": "user_A_id"
        },
        "-KWh5_W12qsXFaJhyOvz": {
            "name": "Lucien Guimaraes",
            "sent": 1479294463729,
            "text": "Test",
            "uid": "user_C_id"
        }
    }
},
"room-metadata": {
    "-KWgoXt567vzgxZ-1gii": {
        "users": {
            "user_A_id": "Lucien Guimaraes",
            "user_B_id": "Geralt of Rivia"
        }
    },
    "-KWgoXt567vzgxZ-1git": {
        "users": {
            "user_A_id": "Lucien Guimaraes",
            "user_C_id": " Gordon Freeman"
        }
    }
}
}

对于您的信息,“user_A_id”或“user_B_id”应为Firebase身份验证提供的ID。在这个例子中,我希望用户A获得所有房间(因为他在两个可用的房间)。用户B应该只有第一个房间而用户B只有最后一个房间。

以下是我的规则:

Firebase rules for my project

我能够几乎完美地允许Rooms的写访问权限(唯一剩下的问题是无法删除邮件的用户,我不知道为什么)。但是对于Read,我有一个很大的问题:我无法设置自定义规则,因为“room-message”中的值“$ roomId”是未知的。只能作为“$ roomId”的孩子这样做。

我想要实施什么解决方案?

谢谢!

#AskFirebase

0 个答案:

没有答案