我有一个这样的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”分支获取我所属的所有组? 还是我需要在每个用户下维护他所属组的列表?