firebase规则基于声明:如何引用某些父级?

时间:2018-06-05 06:22:41

标签: firebase firebase-realtime-database firebase-authentication firebase-security-rules

在firebase中定义规则时,是否可以引用层次结构中的更高级别,如下所示:

"enterprises": {
  "$enterprise_id": {
    "meetings": {
      "$meeting_id": {
        ".read": "$meeting_id === auth.meeting_id && $enterprise_id == auth.enterprise_id",
          "users": {
            "$user_id": {
              ".read": "$user_id === auth.uid && $meeting_id === auth.meeting_id && $enterprise_id === auth.enterprise_id"
            }
          }
        }
      }
    }
}

这意味着为了阅读" $ meeting_id"用户必须拥有一个令牌,其中包含匹配meeting_id和enterprise_id的声明。

实际上它似乎不起作用,但实现这一目标的方法是什么?

也许是这样的: "data.parent().parent().val() === auth.enterprise_id"

1 个答案:

答案 0 :(得分:0)

在firebase规则模拟器中进行了一些摸索后,我想到了一些事情:

1)引用令牌声明的方式是auth.claims.meeting_id

2)我声明中的ID是大整数,不起作用,我将它们转换为字符串。

"claims": {
    "meeting_id": "5150900591001600",
    "enterprise_id": "5719825666015232"
  }

之后,引用更高级别ID的规则,如此

".read": "$meeting_id === auth.claims.meeting_id && $enterprise_id === auth.claims.enterprise_id"

工作正常。

如果您遇到类似问题,最重要的建议是使用规则模拟器,粘贴您的令牌内容,并尝试“一步一步”,如@andréKool所说。