如何在Firebase实时数据库中基于输入数据编写规则条件

如何在Firebase实时数据库中基于输入数据编写规则条件,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我有一个Firebase实时数据库,它以预测的结构写入 是否有方法使用规则验证经过身份验证的用户的UID是否与某个数据输入值匹配? ,但在我的例子中,我想将UID与输入JSON中的数据进行比较 例如,在我的例子中,输入数据采用以下JSON数据结构: { "UserID": "SOME_UID", "UserName": "SOME_USERNAME", "CompletionMoves": 3,

我有一个Firebase实时数据库,它以预测的结构写入

是否有方法使用规则验证经过身份验证的用户的UID是否与某个数据输入值匹配?

,但在我的例子中,我想将UID与输入JSON中的数据进行比较


例如,在我的例子中,输入数据采用以下JSON数据结构:

{ "UserID": "SOME_UID", "UserName": "SOME_USERNAME", "CompletionMoves": 3, "CompletionTime": 12.345 }
它被发布到一个位置,其中包括一个级别名称,然后是用户的UID,类似于
/Level3/SOME\u UID

我想验证用户的UID是否等于数据中的UserID值

我曾想过尝试以下规则逻辑,但由于某种原因,它在uid比较行的测试中失败:

{
  "rules": {
    "$level": {
      "$uid" : {
            ".read": "auth != null",
                    ".write": "auth != null 
                    && newData.child($level).child($uid).child('UserID').val() == auth.uid",
      }
    }
  }
}
有人知道我错过了什么吗?提前谢谢

请尝试“.child(auth.uid)”而不是“.child($uid)”


这对我很有用(如果我正确理解了您的问题)。

安全性中的
newData
data
变量是声明规则的节点上(新)数据的快照。因此,您不需要构建到
UserID
的整个路径,而是可以直接引用它

因此,不是:

&& newData.child($level).child($uid).child('UserID').val() == auth.uid",
使用:

&& newData.child('UserID').val() == auth.uid",