Firebase - 在安全字段和不安全字段之间拆分表

时间:2015-10-27 15:53:41

标签: firebase firebase-security firebase-authentication

在安全数据字段(用户不信任自己更新)和不安全数据之间构建Firebase表/对象是否有最佳实践?他们可以自行设置?

例如,用户可以在自己的users对象中自由更改其名称或偏好设置,但他们不应该随意更改设置,例如,如果他们是付费用户,则是他们的电子邮件已确认或者对于用户的具体示例,user.name应该由用户直接编辑,而user.email只能通过我们自己的API进行更改,然后更新Firebase的记录。

这似乎必须是一个常见的要求,因为我基本上在我们需要的每个表中看到它。例如我们有users,我们有projects,我们在项目中有tasks等等。对于每种数据类型,总会有用户可编辑的字段和不

那么哪种方法最佳实践?这有两种可能性:

secure_data:
  users:
    user1:
      email:
    user2:
  projects:
  tasks:
insecure_data:
  users:
    user1:
      name:
    user2:
  projects:
  tasks:

或者:

users:
  user1:
    secure:
      email:
    insecure:
      name:
projects:
   project1:
     secure:
     insecure:
tasks:

顺便说一句,this answer意味着我应该使用上面的第一个选项,但我想更一般地构建这个问题,看看是否确实有这方面的最佳实践。

1 个答案:

答案 0 :(得分:4)

有一整套指南涵盖最佳做法,包括data structuressecurity related to auth的主题,其中包括现场演示。

由于previously linked问题已经涵盖了阅读安全数据的用例,我还假设您不会问同一个问题,并且您只对此感兴趣写限制。如果你想要阅读限制,那么这个问题是重复的;除非该路径中的所有数据都是可读的,否则您将无法在路径上进行迭代或查询。

写限制非常简单;仅授予对相关字段的写访问权。

例如,如果用户应该能够写入电子邮件而不是付费状态:

{
  "rules": {
     "users": {
        "$uid": {
           // allow write access to email but not paid status
           "email": ".write": "auth.uid === $uid"
        }
     }
  }
}