我想在Firebase中指定规则,以便只有知道路径才能访问。
/root
/messages
/message1
/message2
/message3
如果您访问/消息,您可以收到拒绝(或没有)的权限。
如果您明确访问/ messages / message2,则会获得内容。
更新1:预期行为(iOS)
FIRDatabase 。数据库() 。参考() .child("邀请&#34) .observeEventType(.Value,withBlock:{snapshot in
//快照不返回任何内容或拒绝权限。 })
FIRDatabase
.database()
.reference()
.child("invitations/message1")
.observeEventType(.Value, withBlock: { snapshot in
// snapshot returns message1
})
答案 0 :(得分:3)
这不是答案,但我相信OP正在询问如何防止给定节点下的节点枚举,同时如果用户知道给定节点的DIRECT路径则允许匿名访问。
我也一直试图弄清楚如何做到这一点。基本上,我试图在给定节点下发布半敏感数据,同时通过不同方式安全地提供节点名称。但是,我不想在Firebase中实现“安全/用户”模型。我只想使用类似于Amazon S3存储桶的Firebase,如果您知道密钥的位置,则可以下载存储在该位置的文件/数据,同时仍然阻止数据库中节点的枚举/列表。
此类用法的一个示例是,如果使用加密摘要(如SHA2)生成密钥名称。密钥无法轻松生成,但如果您知道密钥,则可以直接访问该节点。有谁知道怎么做?
编辑:我想出了如何在Firebase中执行此操作。解决方案相当简单。以下是Firebase中JSON安全规则的示例:{
"rules": {
"users" : {
".read": false,
".write": false,
"$child" : {
".read" : true,
".write" : true
}
},
"chats" : {
".read" : false,
".write" : false,
"$child" : {
".read" : true,
".write" : true,
},
},
"comments" : {
".read" : false,
".write" : false,
"$child" : {
".read" : true,
".write" : true
},
},
".read": false,
".write": false
}
}
在此示例中,“users”,“chats”和“comments”下的任何节点都可以直接访问,但枚举不再可能。
答案 1 :(得分:1)
您需要在消息ID级别内指定访问权限。
如果你清楚自己想要实现什么,它将如下所示:
{
"rules": {
"messages": {
//if you add the read permission here it will give you access to all messages
"$message": {
//here it will give only to the specific $message.
//if you want to specify the exctly message id you can do something like "$message == 'message1'" on the ".read"
".write": "auth != null",
".read": "auth != null"
}
}
}
}