针对被阻止用户的严重问题Firebase读取规则

时间:2020-08-20 10:30:07

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

我正面临Firebase安全规则的严重问题。我想将read设置为false,以阻止搜索到的用户。这是我的数据库结构。

users:{
      uid1:{
           name:"Joe",
           created:1226287
          },
      uid2:{
          name:"John",
          created:1273725
          },
      uid3:{...},
      uid4:{...},
      ...
   },

 blocked:{
       uid1:{
            uid2: true,
            uid4: true
       }
   }

考虑以上结构,假设user2通过键入“ Joe”的名称来搜索users节点下的用户,然后单击Enter。我是这样设置我的Firebase规则的。

 users:{
     $uid:{
         ".read":"!root.child('blocked').child($uid).hasChild(auth.uid)"
         }
     }

如果user2查询user/user1路径,则此规则有效。但是当user2搜索时,如何防止他获取被阻止的用户数据。

1 个答案:

答案 0 :(得分:1)

没有直接方法来获取尚未阻止该特定用户的用户列表。但是,如果用户正在基于用户名或其他基于用户的条件进行搜索,那么最好的工具就是Firebase Functions。

实现该功能的步骤(考虑基于名称的搜索)(从客户端调用firebase函数并传递搜索名称):

  1. 获取具有相同名称的所有用户详细信息。
  2. 获取已阻止请求用户的所有用户(或同名用户)。
  3. 弹出所有阻止请求用户的用户。
  4. 将用户列表发送回请求的用户。

为什么在这种情况下Firebase Function是最佳选择?因为这些功能是在安全的环境中执行的,并且可以绕过安全规则。

Read more about the functions here.