Firebase数据库 - 仅允许所有者用户访问集合节点

时间:2017-08-08 16:58:07

标签: firebase firebase-realtime-database

我想知道我的问题是否可以使用firebase数据库规则解决,这就是问题:

如何编写规则以使firebase只响应与经过身份验证的用户相关的请求?

我有2个集usersrequests。每个user都有一个requests对象,每个requests对象都有一个users对象,以便连接两个集合。 request与两个users相关。

贝娄是结构

{
"users": {
    "user1": {
        "requests": {
            "req1": true,
            "req2": true
        }
    },
    "user2": {
        "requests": {
            "req1": true
        }
    }
},
"requests": {
    "req1": {
        users: {
            user1: true,
            user2: true
        }
    },
    "req2": {
        users: {
            user1: true,
            user3: true
        }
    }
}}

我有 .read / .write 的规则,但仅当我向/requests/someId请求时才有效:

{
  "requests": {
    "$request_id": {
      ".read": "data.child('users').hasChild(auth.uid)",
      ".write": "data.child('users').hasChild(auth.uid)"
}}

我一直在尝试很多规则组合,但当我要求requests

时,我无法获得与user相关的/requests

1 个答案:

答案 0 :(得分:1)

您无法使用规则来过滤'结果。您只能向该用户有权访问的数据库的节点发送查询。

解决方案是将事情分开。让我们假设你有一个带有这些键的集合: A,B,C,D,E,F,G

对于用户ER4521,您需要创建一个节点ER4521 /集合作为内容: B,D,F,G

首先请求是获取ER4521 / collection的集合 然后发送每个结果的请求以获取有关B,D,F和G的所有信息。

或者您将使用云功能将集合复制到用户ID /集合。

问候,彼得