【问题标题】:Why don't .validate security rules get run when data is removed from Firebase?从 Firebase 中删除数据时,为什么不运行 .validate 安全规则?
【发布时间】:2014-03-13 01:47:23
【问题描述】:

当我从 Firebase 中删除数据时,我的 .validate 规则似乎没有得到执行。这是错误还是故意行为?

【问题讨论】:

    标签: firebase


    【解决方案1】:

    一般来说,.validate 规则用于定义数据应该是什么样子如果它存在。当数据被删除时它们故意不运行。您应该改为使用 .write 规则来决定是否应允许写入(或删除)。

    例如,考虑保护简单聊天室的这些规则,用户可以在其中创建新的聊天室,但只能删除他们是所有者的聊天室:

    {
      "rules": {
        ".read": true,
        "$room": {
          ".write": "auth != null && (
                       (!data.exists() && newData.child('owner').val() == auth.uid) ||
                       (!newData.exists() && data.child('owner').val() == auth.uid))",
          ".validate": "newData.hasChildren(['owner', 'name'])",
          "name": {
            ".validate": "newData.val().length > 10"
          },
          "messages": {
            ".write": "auth != null"
          }
        }
      }
    }
    

    .write 规则用于确定用户是否有权创建/删除聊天室,.validate 规则用于定义聊天室(如果存在)应该是什么样子。

    如果 .validate 规则在删除时运行,您将永远无法删除聊天室(因为两个 .validate 规则都会失败)。因此决定不对删除运行 .validate 规则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2018-11-27
      • 2018-12-18
      • 1970-01-01
      • 2021-12-05
      • 2020-08-08
      相关资源
      最近更新 更多