我有点困惑。我有一个Firebase实时数据库,其中包含一系列事件。用户可以记录事件并具有特定类型。有些用户具有特殊权限,应该能够查看所有事件,有些用户只能查看自己的事件和标记为公共的事件。 如果我查看教程,我发现firebase实时数据库规则和过滤器之间存在差异。如果我查询数据库/事件,那么规则就无法执行,对于登录用户,只返回他可以查看的那些事件:
{
"events" : {
"-L6AoVZmchCcR64twRY8" : {
"uid" : "12345678",
...
},
"-L6BPHEbIGEOE_hwbrNu" : {
"uid" : "87654321"
...
}
}
我在教程中看到:https://firebase.google.com/docs/database/security/securing-data?authuser=0规则不是过滤器,不应该像这样使用。但后来我在教程的上半部分看到了:
{
"rules": {
"messages": {
"$message": {
// only messages from the last ten minutes can be read
".read": "data.child('timestamp').val() > (now - 600000)",
// new messages must have a string content and a number timestamp
".validate": "newData.hasChildren(['content', 'timestamp']) && newData.child('content').isString() && newData.child('timestamp').isNumber()"
}
}
}
}
现在我很困惑,因为这看起来只回归那些?或者是不同的查询?有没有办法通过规则来获取用户有权查看的那些事件?
答案 0 :(得分:0)
你基本上可以通过创建一个" power"每个用户的子项,然后在您的规则中检查:
".read": "data.parent()...child('power').val() == 'all'"