如何允许Firebase用户仅访问他们创建的文档

时间:2019-10-05 14:36:49

标签: firebase-security

在我看来,这是针对用户生成的内容的最基本的身份验证方案,给出了一个称为“帖子”的集合:

  1. 允许任何经过身份验证的用户插入“帖子”集合
  2. 允许将文档插入到集合“ posts”中的用户阅读,更新和销毁文档,并拒绝所有其他人
  3. 如果用户是原始创建文档的人,则允许用户列出集合“帖子”中的所有文档

到目前为止,我发现的所有示例似乎都依赖于文档ID与用户ID相同,后者仅适用于用户的“个人资料”数据(同样,所有示例似乎都适用于这种有限的情况)。

创建文档时,似乎没有关于经过身份验证的用户身份的元数据,因此似乎我必须自己将ID存储在文档上,但是我无法通过至此,创建一个工作示例。此外,由于用户ID是由客户端设置的,因此这也为用户提供了与其他用户一样创建文档的机会。

我觉得这里缺少基本的东西,因为这必须是最基本的情况,但尚未找到任何简洁的示例。

非常感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

此答案来自此github gist。基本上,在文档收集帖子中,有一个名为uid的字段,它检查是否与用户uid相匹配。

// Checks auth uid equals database node uid
// In other words, the User can only access their own data

{
  "rules": {
    "posts": {
       "$uid": {
         ".read": "$uid === auth.uid",
         ".write": "$uid === auth.uid"
       }
     }
   }
}

-编辑-

DSL规则

match /Posts/{document=**}{
    allow read : if uid == request.auth.uid;
    allow write: if uid == request.auth.uid;
}