我想编写一条允许用户读取的规则,当且仅当嵌套子节点具有与auth uID相同的userId时
我的数据库结构如下
"Chats":{
"-KDKndo4sg47f7s9":{
"-KDlmsn4hj4h4jk2n":{
"fromId" : "uid1234n5g3h34g5g5h33j33g4g43h3h3"
"text" : "Hi, Can you please help me on this?"
"toId" : "uid234553sdfj3n4hjjh3jk3h3jk4k4nm3m3"
}
}
}
在此数据库结构中,-KDKndo4sg47f7s9
是groupId / group键,-KDlmsn4hj4h4jk2n
是messageId / message键。
这是我的规则
"Chats":{
"$groupId":{
".read": "data.child('$messageId').child('fromId').val() === auth.uid" ,
".write":"newData.child('$messageId').child('fromId').val() === auth.uid"
}
}
我使用该位置测试了对规则的读访问权限
/Chats/-KDKndo4sg47f7s9
和userId “uid1234n5g3h34g5g5h33j33g4g43h3h3”
始终拒绝读写。但如果我通过直接传递密钥来编写规则
"Chats":{
"$dealId":{
".read": "data.child(‘-KDlmsn4hj4h4jk2n’).child('fromId').val() === auth.uid" ,
".write":"newData.child(‘-KDlmsn4hj4h4jk2n').child('fromId').val() === auth.uid",
}
}
允许读写。 简而言之,我不想让一个用户阅读另一个用户的消息。请帮帮我。提前谢谢。
答案 0 :(得分:3)
此规则不正确:
"Chats":{
"$groupId":{
".read": "data.child('$messageId')"
在第三行中,您有一个字符串'$messageId'
。您希望它更有可能是data.child($messageId)
,但这会产生语法错误,因为未定义$messageId
。将$messageId
放在引号中将删除语法错误,但现在它只是一个没有你想要的意义的文字字符串。
我最好的猜测是,您的数据库结构意味着/Chats/$groupId/$messageId
,在这种情况下,您的规则应该反映出来:
"Chats":{
"$groupId":{
"$messageId":{
".read": "data.child($messageId).child('fromId').val() === auth.uid"
使用此规则,如果您是发件人,则可以阅读邮件。