【问题标题】:How do you get the top value of newData in Firebase Realtime Database rules?如何在 Firebase 实时数据库规则中获得 newData 的最高值?
【发布时间】:2020-09-25 14:09:51
【问题描述】:

Firebase 规则的新功能。我可能认为这一切都错了,但无论如何,我正在尝试创建一个规则,以确保写入数据库的 newData 不存在于它正在写入的节点下。要写入数据库,我正在使用此代码:

self.reference?.child("users").child(userid).setValue(data) {
            (error, result) in
            if (error != nil) {
                completion(true, error!.localizedDescription)
            } else {
                completion(false, "")
            }
        }

这里是我想创建规则的地方:

    {
  "rules": {
        ".read": false,
      "users": {
        ".write": //allow write if the newData's keyBasedOnAuthID is not under students already
          "$student_id": {
                //more rules...
            }
      },

我传入的 newData 看起来像这样:

{ keyBasedOnAuthID {
 uid: auth.uid 
 name: xxxx
 other:{
  key: xxx
  key: xxx
  }
} }

我正在将此数据写入名为“用户”的节点,因此最终路径将是 root.child('users').child(newData)。我想制定的规则将阻止用户将重复数据写入“用户”节点。所以我想从 newData 中获取 keyBasedOnAuthID 值并检查它是否已经存在。

这可能吗?我尝试了许多不同的方法来从 newData 快照中检索 keyBasedOnAuthID,但没有一种方法奏效。也许我需要一种不同的方法?任何帮助将不胜感激!

【问题讨论】:

  • 如果您编辑问题以显示添加数据的完整代码可能会更清楚,并更清楚地说明您希望接受正在写入的新数据的情况.
  • @DougStevenson 现在好点了吗?

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


【解决方案1】:

很遗憾,我不确定您使用的是哪种语言。

但是,setValue 不会创建重复项:为给定路径创建或更新数据。

因此,如果您不想更新现有数据,则需要在应用程序代码中调用 setValue 方法之前检查是否存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多