Firebase数据库规则-动态密钥的通配符

Firebase数据库规则-动态密钥的通配符,firebase,firebase-realtime-database,firebase-authentication,firebase-security,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Security,我有一个用例,在这个用例中,我希望仅当ID中有一个键===时,才允许其他用户读取我ID键下的数据 假设我有用户123和456,他们将json对象写在“ orders- I -123 I -456 我只希望用户123和456能够读取456个节点。根据我提供的规则,只有123能够读取节点: "orders": { "$uid": {

我有一个用例,在这个用例中,我希望仅当ID中有一个键===时,才允许其他用户读取我ID键下的数据

假设我有用户123和456,他们将json对象写在“

orders-
              I
               -123
                        I
                         -456
我只希望用户123和456能够读取456个节点。根据我提供的规则,只有123能够读取节点:

"orders": {
    "$uid": {
        ".read": "auth.uid  === $uid || root.child('orders').child($uid).child(auth.uid).exists()",
        ".write": "auth.uid != null",
    }
}
我做错了什么?有人能帮我吗

编辑:模拟器的两个屏幕截图


我通过设置这些规则解决了这个问题(注意$id嵌套在$uid中):

之前我认为这一行应该完成以下工作:

 ".read": "auth.uid  === $uid || root.child('orders').child($uid).child(auth.uid).exists()",

请记住,我们无法知道您屏幕截图中的数据是什么意思。而且….使中间的段落不必要地难以阅读。您可能希望用实际的JSON替换屏幕截图,您可以通过单击溢出菜单中的“导出JSON”链接来获得(⠇) 在您的上。查看您希望允许的最小读取代码也是非常有用的,但这是失败的;具有尽可能多的硬编码值。感谢您的评论,您对…的看法是正确的,并且替换了它,现在我认为更具可读性。我正在规则模拟器中尝试,因为直到我让规则按我想要的方式运行。案例是用户在“订单”下下下订单myID并等待答案,我将在同一个节点中发布。我希望myID只能由我读取,如果有具有此用户ID的子级,则此用户可以读取此子级,但只能读取此子级…问题是我不知道如何设置此规则我认为我提供的代码应该可以工作,但它不允许用户读取此节点。如果问题只存在于模拟器中,请编辑您的问题,以包括模拟器的屏幕截图,以及您尝试读取的路径和正在使用的身份验证状态。好的,我添加了两个屏幕截图。当您使用模拟器时,它使用数据库中的实际数据来确定是否允许读取或写入。您输入的路径为模拟器的ut看起来与数据库中的不匹配。
 ".read": "auth.uid  === $uid || root.child('orders').child($uid).child(auth.uid).exists()",