Firebase实时数据库规则与过滤器

时间:2018-03-02 22:29:50

标签: firebase firebase-realtime-database

我有点困惑。我有一个Firebase实时数据库,其中包含一系列事件。用户可以记录事件并具有特定类型。有些用户具有特殊权限,应该能够查看所有事件,有些用户只能查看自己的事件和标记为公共的事件。 如果我查看教程,我发现firebase实时数据库规则和过滤器之间存在差异。如果我查询数据库/事件,那么规则就无法执行,对于登录用户,只返回他可以查看的那些事件:

    {
  "events" : {
    "-L6AoVZmchCcR64twRY8" : {
      "uid" : "12345678",
...
    },
    "-L6BPHEbIGEOE_hwbrNu" : {
      "uid" : "87654321"
...
    }
}

我在教程中看到:https://firebase.google.com/docs/database/security/securing-data?authuser=0规则不是过滤器,不应该像这样使用。但后来我在教程的上半部分看到了:

{
  "rules": {
    "messages": {
      "$message": {
        // only messages from the last ten minutes can be read
        ".read": "data.child('timestamp').val() > (now - 600000)",

        // new messages must have a string content and a number timestamp
        ".validate": "newData.hasChildren(['content', 'timestamp']) && newData.child('content').isString() && newData.child('timestamp').isNumber()"
      }
    }
  }
}

现在我很困惑,因为这看起来只回归那些?或者是不同的查询?有没有办法通过规则来获取用户有权查看的那些事件?

1 个答案:

答案 0 :(得分:0)

你基本上可以通过创建一个" power"每个用户的子项,然后在您的规则中检查:

".read": "data.parent()...child('power').val() == 'all'"