【问题标题】:Firebase nested rulesFirebase 嵌套规则
【发布时间】:2018-06-17 07:53:07
【问题描述】:

我想编写一个规则,当且仅当嵌套子项的 userId 与 auth uID 相同时,才允许用户阅读

我的数据库结构如下

"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 和用户 ID “uid1234n5g3h34g5g5h33j33g4g43h3h3”

读取和写入总是被拒绝。但是,如果我通过如下方式直接传递密钥来编写规则

"Chats":{
        "$dealId":{
              ".read": "data.child(‘-KDlmsn4hj4h4jk2n’).child('fromId').val() === auth.uid" ,
              ".write":"newData.child(‘-KDlmsn4hj4h4jk2n').child('fromId').val() === auth.uid",        
            }
      }

允许读写。 简而言之,我不想让一个用户阅读另一个用户的消息。请帮助我。提前致谢。

【问题讨论】:

    标签: ios firebase firebase-realtime-database firebase-security


    【解决方案1】:

    这条规则不正确:

    "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"
    

    使用此规则,如果您是发件人,您将能够阅读邮件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多