为什么不从Firebase中删除数据时运行安全规则?

时间:2014-03-12 17:47:23

标签: firebase

当我从Firebase删除数据时,我的.validate规则似乎无法执行。这是一个错误还是故意行为?

1 个答案:

答案 0 :(得分:12)

通常,.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规则。