带通配符的Firebase安全规则

带通配符的Firebase安全规则,firebase,firebase-security,firebase-authentication,Firebase,Firebase Security,Firebase Authentication,我有这样一个数据结构: "Restaurant": { "$id": { ".read": "auth.uid != null", ".write": "data.child($id).child('User').child($anotherWildcard).child('id').val() === auth.uid" } } 在firebase安全规则中,如何访问/Restaurant/-KK3

我有这样一个数据结构:

"Restaurant": {
        "$id": {
            ".read": "auth.uid != null",
            ".write": "data.child($id).child('User').child($anotherWildcard).child('id').val() === auth.uid"  
        }
    }

在firebase安全规则中,如何访问
/Restaurant/-KK37k6g5cYYippEHpZ3/User/-kk37k6g5cyippehpz4/id
的值?两个按键应为通配符。我需要这样的东西:

"Restaurant": {
        "$id": {
            ".read": "auth.uid != null",
            ".write": "data.child($id).child('User').child($anotherWildcard).child('id').val() === auth.uid"  
        }
    }

不确定我是否完全理解你的要求,但我的想法是这样的

规则中的第一个问题是,您正在指定
子($id)
,但您已经在
$id
中了。在您的
数据
中,您指的是
$id

要解决您的主要问题,您不需要另一个通配符。您可以使用
hasChild
来验证
auth.uid
是否在
餐厅/用户

"Restaurant": {
   "$id": {
      ".read": "auth.uid != null",
      ".write": "auth.uid != null && data.child('User').hasChild(auth.uid)"
   }
}

如果你能给我们一些你想要达到的逻辑的背景知识,那就太好了。让我猜猜。您是否试图确保如果用户有此餐厅的订单,他将具有对该餐厅的写访问权限?或者您想只对用户订单授予写访问权限?对不起,我的错误,更改了上述查询。用户具有与订单相同的结构。我只想给这家餐厅的会员用户授予写权限。但是现在我更困惑了。为什么在一个用户中有两个ID?你为什么要做
餐馆/User/id/id
?这两个ID是什么?您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库中的导出按钮轻松获得该文本。将JSON作为文本使其可搜索,允许我们轻松使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。嘿@dabo,如果我的答案不清楚或者您还有其他问题,请告诉我。谢谢在重构了我的数据结构之后,.hasChild()为我做了这件事,谢谢!前面的问题是,data.child('User')没有作为直接子对象的userid,而是在两者之间嵌套了pushid。一家餐厅可以有多个用户。我也有类似的问题,但似乎无法让它工作。(我无法匹配通配符
$id
)请看一下: