Ios Firebase嵌套规则
我想写一条规则,当且仅当嵌套子级的userId与auth-uID相同时,才允许用户读取 我的数据库结构如下Ios Firebase嵌套规则,ios,firebase,firebase-realtime-database,firebase-security,Ios,Firebase,Firebase Realtime Database,Firebase Security,我想写一条规则,当且仅当嵌套子级的userId与auth-uID相同时,才允许用户读取 我的数据库结构如下 "Chats":{ "-KDKndo4sg47f7s9":{ "-KDlmsn4hj4h4jk2n":{ "fromId" : "uid1234n5g3h34g5g5h33j33g4g43h3h3" "text" : "Hi, Can you please help me on this?" "toId" : "uid
"Chats":{
"-KDKndo4sg47f7s9":{
"-KDlmsn4hj4h4jk2n":{
"fromId" : "uid1234n5g3h34g5g5h33j33g4g43h3h3"
"text" : "Hi, Can you please help me on this?"
"toId" : "uid234553sdfj3n4hjjh3jk3h3jk4k4nm3m3"
}
}
}
在这个数据库结构中,-KDKndo4sg47f7s9
是groupId/组键,-kdlmsn4hj4hk2n
是messageId/消息键。
这是我的规则
"Chats":{
"$groupId":{
".read": "data.child('$messageId').child('fromId').val() === auth.uid" ,
".write":"newData.child('$messageId').child('fromId').val() === auth.uid"
}
}
我使用位置测试了对规则的读取权限
/Chats/-KDKndo4sg47f7s9
和用户ID“uid1234n5g3h34g5g5g5h33j33g4g43h3h3”
读取和写入总是被拒绝的。但是,如果我在编写规则时直接传递密钥,如下所示
"Chats":{
"$dealId":{
".read": "data.child(‘-KDlmsn4hj4h4jk2n’).child('fromId').val() === auth.uid" ,
".write":"newData.child(‘-KDlmsn4hj4h4jk2n').child('fromId').val() === auth.uid",
}
}
读和写都是允许的。
简而言之,我不想允许一个用户阅读另一个用户的消息。请帮我做这个。提前感谢。此规则不正确:
"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"
使用此规则,如果您是发件人,您将能够阅读邮件。感谢您的回答Frank van Puffelen,但我想访问此路径/Chats/$groupId,并想阅读fromId等于auth.uid的邮件。这可能吗?要从
/Chats/$groupId
读取,您需要具有该路径的读取权限。这意味着安全规则不能用于筛选数据。这被称为。我建议你去看看其中的一些,包括。