Firebase数据库安全规则阻止发布

Firebase数据库安全规则阻止发布,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我试图阻止我的主视图加载用户标记的帖子 我的数据结构如下: "reportedPosts" : { "HtnULzU0lnZKYva2M2Wepl6N8wE3" : { "reported" : true, }, "boX6rtJ98haWVxNoXfSq21maCVU2" : { "reported&q

我试图阻止我的主视图加载用户标记的帖子

我的数据结构如下:

    "reportedPosts" : {
        "HtnULzU0lnZKYva2M2Wepl6N8wE3" : {
            "reported" : true,
        },
        "boX6rtJ98haWVxNoXfSq21maCVU2" : {
            "reported" : true,
        },
    },

    "posts" : {
        "HtnULzU0lnZKYva2M2Wepl6N8wE3" : {
            "details" : "abc",
        },
        "boX6rtJ98haWVxNoXfSq21maCVU2" : {
            "details" : "abc",
        },
        "jSMSkY9rHtdNkXoLrsFmCAXdY9n2" : {
            "details" : "abc",
        },
        "jnFhJbgCjZeJFx0hspObqoskQej2" : {
            "details" : "abc",
        },
        "r6KPesUr1qORfIJke07SloZHeNW2" : {
            "details" : "abc",
        }
    }
我的安全规则:

      "posts": {
        ".indexOn": "datestamp",
        "$post_id" : {
          // only load posts not reported
          ".read": "auth != null && !root.child('reportedPosts').hasChild($post_id)",
          ".write": "auth != null"           
        }               
      },     

      "reportedPosts" : {
        ".read": "auth != null",       
        ".write": "auth != null"        
      }
不管我怎样

位于/dev/posts的侦听器失败:权限被拒绝


有人能帮我解释一下吗?

这是设计Firebase数据库时常见的绊脚石。正如文档所说,如果您使一些子实体可读,而另一些子实体不可读,您将无法再像预期的那样获取/发布


一个简单的解决方案是:报告一篇文章时,将其从/posts移动到/reportedPosts,这样它就不再存在于/posts下。然后,在您审阅完帖子后,如果帖子没有违反任何规则,您可以将其移回/posts下。这简化了您的规则,并允许用户获取帖子列表而不查看报告的帖子。

这是设计Firebase数据库时常见的障碍。正如文档所说,如果您使一些子实体可读,而另一些子实体不可读,您将无法再像预期的那样获取/发布


一个简单的解决方案是:报告一篇文章时,将其从/posts移动到/reportedPosts,这样它就不再存在于/posts下。然后,在您审阅完帖子后,如果帖子没有违反任何规则,您可以将其移回/posts下。这简化了您的规则,允许用户获取帖子列表而不查看已报告的帖子。

为什么我没有想到这一点,这是一个很好的解决方案!为什么我没有想到这一点,这是一个伟大的解决方案!