无法使用安全规则读取所有数据

时间:2021-05-24 14:41:19

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

我正在尝试以具有管理节点的用户身份读取所有事件节点, 如果不是管理员,则只能读取相关事件。 我无法使用此安全规则获取所有事件的问题。

  "Event":{
      "$uid": {
            ".read": "auth.uid == $uid || root.child('Users').child(auth.uid).child('admin').val() == 'admin'",
            ".write": true
        }

我的请求如下所示:

   var starCountRef = firebase.database().ref("Event/"); //trying to read all events as admin
    starCountRef.on("value", (snapshot) => {
      const data = snapshot.val();

1 个答案:

答案 0 :(得分:1)

我们在这里遇到的问题是 RTDB 规则是自上而下工作的。这意味着如果顶部的一条规则拒绝访问,那么下面的一条规则并不重要。在您的情况下,将整个列表的访问权限授予管理员是没有问题的,但对于事件的每个所有者来说也是如此。因为那些可能不是管理员。并且只有将 In alpha: Hi In beta: Hello 放在 uid 上方时才能访问整个列表。

我可以想出一种方法来让它发挥作用。有 .read 条规则。关于他们的更多信息here

您可以这样编写规则:

query-based

然后您需要通过查询访问数据以获取它:

 "Event":{
      ".read": "query.equalTo == auth.uid || 
           root.child('Users').child(auth.uid).child('admin').val() == 'admin'" 
        }
相关问题