Ios Firebase嵌套规则

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

我想写一条规则,当且仅当嵌套子级的userId与auth-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
读取,您需要具有该路径的读取权限。这意味着安全规则不能用于筛选数据。这被称为。我建议你去看看其中的一些,包括。