【发布时间】:2021-07-23 06:55:56
【问题描述】:
我的数据库结构
{
"messages": {
"-top_level_random_push_id": {
"-child_level_random_push_id": { --- I don't have this id on device, I have all other id's defined here
"createdBy": "hgdhjstdvhhghjg6765HHH87AA", --- firebase uid
"message": "Hello",
"sentTo": "jhgsjdg6565KKKgsdsgdfGGGJ", ---- firebase uid
"timestamp": 1602047893089
}
}
}
}
// 这就是我从我的 android 应用程序中读取的方式
firebaseRef = FirebaseDatabase.getInstance().getReference("messages").child("-top_level_random_push_id")
firebaseRef.addListenerForSingleValueEvent(object : ValueEventListener {
}
如果请求包含-top_level_random_push_id,我可以设置数据库规则以允许只读吗?基本上只有当conversions/-top_level_random_push_id ===来自客户端请求的子节点id时才允许读取操作
"conversations": {
"$convoId": {
".indexOn": "timestamp",
".read": "$convoId == nodeId from the request" --- Not sure how to get this node id from request
}
},
}
【问题讨论】:
-
我不确定我是否理解这个问题。您的安全规则仅允许用户阅读对话,前提是他们为该对话指定了
convoId。这与您共享的 Android 代码非常匹配,因此我不确定您在.read规则中需要哪些内容。 -
感谢 Frank 的检查。我想我想太多用例了。
-
哦,我不是这个意思。我只是认为,如果您将
".read": true设置在您现在拥有的位置,您的规则可能已经做了您想要的。如果不是这种情况,我建议发布不违反规则的代码。
标签: android firebase firebase-realtime-database firebase-security