Firebase 云函数似乎绕过了验证规则,但它不应该';T “连接来宾”:{ “$user_id”:{ “$to_user_id”:{ “.validate”:” !root.child('/connections/'+$user\u id++'/'+$to\u user\u id).exists() ", “分数”:{ .validate:“newData.val()*-1这是否意味着创建触发onCreate侦听器的节点的用户?是的,文档中是这么说的。我从来没有机会/需要尝试,所以请告诉我它是否有不同的效果。可能的答案如下。如果不是这样的话,就分享你认为不应该写的代码。 "connections-guests":{ "$user_id":{ "$to_user_id":{ ".validate": " !root.child('/connections/' + $user_id + '/' + $to_user_id).exists() ", "score": { ".validate": "newData.val() * -1 < now" }, "$other": { ".validate": false } } } },

Firebase 云函数似乎绕过了验证规则,但它不应该';T “连接来宾”:{ “$user_id”:{ “$to_user_id”:{ “.validate”:” !root.child('/connections/'+$user\u id++'/'+$to\u user\u id).exists() ", “分数”:{ .validate:“newData.val()*-1这是否意味着创建触发onCreate侦听器的节点的用户?是的,文档中是这么说的。我从来没有机会/需要尝试,所以请告诉我它是否有不同的效果。可能的答案如下。如果不是这样的话,就分享你认为不应该写的代码。 "connections-guests":{ "$user_id":{ "$to_user_id":{ ".validate": " !root.child('/connections/' + $user_id + '/' + $to_user_id).exists() ", "score": { ".validate": "newData.val() * -1 < now" }, "$other": { ".validate": false } } } },,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,显然,在云函数中,当我创建这个连接来宾节点时,它总是成功的,不管.validate 但是,在模拟器(write:true for root)中,验证规则是受尊重的。最有可能的情况是,您正在使用云函数代码中的Admin SDK访问数据库。当您使用其默认设置初始化AdminSDK时,它会以完全权限运行,实际上会绕过安全规则 如果您不想使用管理权限运行,您可以或者您可以作为触发函数的用户运行。作为触发函数的用户运行。->这是否意味着创建触发onCreate侦听器的节点的用户?是的,文档中是这么说的。我

显然,在云函数中,当我创建这个
连接来宾
节点时,它总是成功的,不管
.validate


但是,在模拟器(write:true for root)中,验证规则是受尊重的。

最有可能的情况是,您正在使用云函数代码中的Admin SDK访问数据库。当您使用其默认设置初始化AdminSDK时,它会以完全权限运行,实际上会绕过安全规则


如果您不想使用管理权限运行,您可以或者您可以作为触发函数的用户运行。

作为触发函数的用户运行。
->这是否意味着创建触发
onCreate
侦听器的节点的用户?是的,文档中是这么说的。我从来没有机会/需要尝试,所以请告诉我它是否有不同的效果。可能的答案如下。如果不是这样的话,就分享你认为不应该写的代码。
    "connections-guests":{
      "$user_id":{
        "$to_user_id":{
          ".validate": "
            !root.child('/connections/' + $user_id + '/' + $to_user_id).exists()
          ",
          "score": {
              ".validate": "newData.val() * -1 <  now"
          },
          "$other": { ".validate": false }
        }
        }
    },