Firebase数据库规则忽略子规则

时间:2017-10-22 09:40:47

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

我正在尝试向firebase数据库添加一个简单的规则。子节点活动具有适当的访问权限,但潜在客户不会。如果我发送父读取为true,则忽略子规则。我怎样才能将父母设为公开但公开但限制儿童?

enter image description here

    {
  "rules": {
    "leads": {
      "$activity": {
        ".read": 
    "root.child('users_business_activities').
    child(auth.uid).hasChild(data.child('category').val())",
        ".write" : 
    "root.child('users').child(auth.uid).child('isAdmin').val() == true"
      }
    },
    "users": {
      "$uid": {
        ".read": "auth.uid == true",
        ".write": "auth.uid == $uid"
      }
    },
    "business_activities": {
        ".read": "auth.uid == true",
        ".write": "false"
    }
  }
}

1 个答案:

答案 0 :(得分:2)

在Firebase Realtime Database permissions cascade downwards中。一旦您授予用户/leads的读取权限,您就无法在JSON树中取消该权限。

这有一些后果:

  • 安全规则不能用于过滤数据。这在Firebase文档中称为rules are not filters。我还建议阅读一些现有的questions on this topic
  • 您经常需要创建用户有权访问的活动ID的查找列表。这样的查找列表通常被称为"索引"在Firebase术语中。 creating scalable data structures上的文档就是这种结构的一个很好的例子。
  • 如果活动/潜在客户的部分数据需要公开阅读,而部分数据需要保密,则您需要将公共和私有部分拆分为单独的顶级节点。这种拆分在文档中称为flattening you data structure。我还提供了一个answer here来展示如何将其用于用户个人资料信息。