我想授予 多个 用户访问权限,以获取他们可以在Firebase Realtime数据库中访问的“消息”的集合。数据库提取将读取“ / messages”,并返回用户有权访问的所有消息的集合。数据库结构如下:
"messages" : {
"-L123456789": {
"access": {
"author": "user-one-id-987654"
"assigned-user-id-1234": "assigned-user-id-1234"
}
"data" : {
"theData": "Hello world!"
}
}
}
我创建了以下规则:
{
"rules": {
"messages": {
"$message_id": {
"data": {
".read": "
//if author or assigned user
data.parent().child('access').child('author').val() === auth.uid ||
data.parent().child('access').child(auth.uid).exists()
",
".write": "false"
}
}
}
}
但是,我无法列出列出为作者或指定用户的所有邮件。
什么规则将允许列为“作者”(user-one-id-987654)或“已分配用户”(assigned-user-id-1234)的用户简单地获取他们有权访问的所有邮件的集合阅读“ / messages /”数据库路径?
我猜答案可能是“消息”的根源?
我尝试了以下规则-它授予所有经过身份验证的用户访问权限-但我只希望返回该用户被列为“作者”或“已分配用户”的集合。
{
"rules": {
"messages": {
".read": "auth.uid !== null"
}
}
}
亲切的问候 / K
答案 0 :(得分:1)
Firebase服务器端安全规则不能用于过滤数据。将侦听器附加到数据库时,服务器将检查该侦听器是否保证始终满足规则(无论数据如何)。如果不符合规则,则立即拒绝侦听器。
因此,如果将侦听器附加到self
,服务器将检查您是否具有对/messages
的读取权限。而且由于您不这样做,它会拒绝侦听器。
如果要允许用户阅读其所有者的邮件,则需要两件事:
有关更多信息,请参见Firebase documentation on securely querying data和blog post introducing this feature。