所以,我有一个具有消息传递功能的应用程序,其中两个用户可以互相发送消息。我正在"消息"中构建我的数据。节点,其中每个节点是两个用户之间的消息线程。每个节点以两个正在通信的用户的两个uid命名,按字母顺序排序
例如,
如果用户(dd77gg)和用户(zz22ss)在对话中,该节点将被命名为" dd77ggzz22ss"。我知道您可以通过
{
"rules": {
"messages": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
但是,在我的例子中,节点不是简单地命名为$ uid,而是将两个uid合并在一起。那么,我的问题是,只有在节点名称的某处找到当前用户的uid时,我才会简单地授予访问权限?
答案 0 :(得分:2)
首先,不要按字母顺序对你的uid进行排序,这似乎是一个好主意,但它不是确定性的。例如。说两个uid是'猫'和'bca'。按字母顺序排序会给你'aabcct'。现在假设你有另外两个uid:'cat'和'cba'。如果你要对它们进行排序,你将得到相同的uids连接,你将获得aabbcct。这将导致以前的会话数据被覆盖。连接两个uid实际上是最好的方法。你不需要对它们进行排序,你只需要有一种连接它们的一种威慑方式。也就是说:我应该先放谁。
现在回答你的问题,你可以在firebase规则中使用contains方法。
{
"rules": {
"messages": {
"$uid": {
".read": "$uid.contains(auth.uid),
".write": "$uid.contains(auth.uid)"
}
}
}
}
您只需检查它是否包含其中一个用户ID,如果有,那么他们当然可以阅读它。我希望这会有所帮助。