读取具有规则限制的Firebase实时数据库的子集

时间:2019-03-12 14:17:10

标签: firebase firebase-realtime-database

我有一个这样的Firebase实时数据库:

{
  "USERS": {
    "user-1": { ... },
    "user-2": { ... }
  }
  "GROUPS": {
    "group-1": {
      "id": "group-1",
      "AUTH": {
        "user-1": true,
      }
    },
    "group-2": {
      "id": "group-2",
      "AUTH": {
        "user-2": true
      }
    },
    "group-3": {
      "id": "group-3",
      "AUTH": {
        "user-1": true,
        "user-2": true
      }
    }
  }
}

我知道我可以授予读取权限,该权限将为仅属于特定组的用户提供读取权限,例如:

{ 
  "rules": {
    "GROUPS": {
      "$groupId": {
        ".write": false,
        ".read": "auth != null && data.child('AUTH').child(auth.uid).exists()"
      }
    }
  }
}

我正在尝试找到一个查询+规则组合,该组合将返回已登录用户所属的所有组。

例如: 对于登录“ user-1”的查询和firebase规则更改,将返回以下快照:

{
  "group-1": {
    "id": "group-1",
    "AUTH": {
      "user-1": true,
    }
  },
  "group-3": {
    "id": "group-3",
    "AUTH": {
      "user-1": true,
      "user-2": true
    }
  }
}

OR

[
  {
    "id": "group-1",
    "AUTH": {
      "user-1": true,
    }
  },
  {
    "id": "group-3",
    "AUTH": {
      "user-1": true,
      "user-2": true
    }
  }
]

现在查询“ GROUPS”引用给我一个“权限被拒绝”错误。

在组中添加“ .read = true”:

{ 
  "rules": {
    "GROUPS": {
      ".read": true,
      "$groupId": {
        ".write": false,
        ".read": "auth != null && data.child('AUTH').child(auth.uid).exists()"
      }
    }
  }
}

或通过条件的'.read'的任意组合,使所有人都可以访问所有数据。

是否有一种方法(在当前结构中)通过向规则添加一些限制来查询数据库并从“ GROUPS”分支获取我所属的所有组? 还是我需要在每个用户下维护他所属组的列表?

0 个答案:

没有答案