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

Firebase DB-仅允许所有者用户访问集合节点,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我想知道是否可以使用firebase DB规则解决我的问题,问题是: 如何编写规则使firebase只响应与已验证用户相关的请求? 我有两个集合用户和请求。每个用户都有一个请求对象,每个请求对象都有一个用户对象,以便连接两个集合。一个请求与两个用户相关 下面是结构 { "users": { "user1": { "requests": { "req1": true, "req2": true } },

我想知道是否可以使用firebase DB规则解决我的问题,问题是:

如何编写规则使firebase只响应与已验证用户相关的请求?

我有两个集合
用户
请求
。每个
用户
都有一个
请求
对象,每个
请求
对象都有一个
用户
对象,以便连接两个集合。一个
请求
与两个
用户
相关

下面是结构

{
"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)"
}}

我已经尝试了很多规则组合,但是当我请求
/请求时,我无法仅获得与
用户相关的
请求

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

解决办法是把事情分开。假设您有一个包含以下密钥的集合: A、 B、C、D、E、F、G

对于用户ER4521,您需要使用以下内容创建节点ER4521/集合: B、 D,F,G

第一个请求是获取集合,如果ER4521/collection 然后为每个结果发送一个请求,以获取关于B、D、F和G的所有信息

或者,您将使用云函数将集合复制到userid/集合


尊敬的Peter,以下是Firebase的文档: