我正在构建一个社交媒体应用程序,任何人都可以在其中阅读正在发生的事情,但必须登录才能与每条帖子互动。我想找到一种方法,让我的所有用户都能做到这一点,而不会有一个不安全的数据库。我几乎完成了开发,目前我正在努力清理一些事情。
出于开发目的,我当前的规则设置为true:
{
"rules": {
".read": true,
".write": true
}
}
我已经尝试了一些规则
1.
{
"rules": {
"$uid": {
".read": true,
".write": "auth.uid == $uid"
}
}
}
它允许每个人阅读,但由于权限原因不允许写入。
2(
{
"rules": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
}
}
由于权限原因,不允许任何人进行读写操作。
3.
{
"rules": {
".read": "auth.uid != null",
".write": "auth.uid != null"
}
}
这很有效,但我后来收到一封电子邮件,告诉我我的数据库不安全。
下面是一个导致拒绝权限错误的示例:
A( 当用户单击"发送新公告"按钮时此函数被调用。
StorageService.sendAnnouncementDataToDatabase(photoUrl: "", announcementComment: announcementComment, ratio: CGFloat(0), onSuccess: {
ProgressHUD.showSuccess("SWEET")
})
B( 内部发送公告数据到数据库功能
let ref = Ref().databaseAnnouncements
let newAnnouncementID = ref.childByAutoId().key ?? ""
let newAnnouncementReference = ref.child(newAnnouncementID)
guard let currentUser = Api.User.CURRENT_USER else {
return
}
var dict = ["userId" : currentUserId, "photoUrl" : photoUrl]
newAnnouncementReference.setValue(dict, withCompletionBlock: {(error,ref) in
// permission denied occurs here
})
我已经通读了许多文件,并提出了疑问。以及尝试为每条路径设置规则。同样的结果。
任何想法都会有所帮助。非常感谢。
如果这是实际目标
在其中,任何人都可以阅读正在发生的事情,但必须登录与每个后交互
则此规则将执行
{
"rules": {
".read": true,
".write": "auth != null"
}
}
因为它允许任何人读取任何内容,但只有经过身份验证的用户才能写入。
然而,正如弗兰克在评论中提到的那样,这是非常不安全的。我们可能可以对这个解决方案进行一些扩展,但如果不了解整个用例,它可能会远远超出这里发布的完整答案。