如何仅允许公开访问firestore文档的特定字段

时间:2017-10-30 09:40:25

标签: firebase firebase-realtime-database google-cloud-firestore

假设我在firestore数据库中有这个结构:

collection[
  document: {
    x: 'x',
    y: 'y'
  }
]

我有这个firebase规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/{document} {
      allow read: if true;
    }
  }
}

但是这条规则暴露了上述document中的整个collection,我想要做的只是公开x字段,是否可能?感谢

1 个答案:

答案 0 :(得分:10)

你做不到。安全规则仅适用于文档级别,因此您无法限制对特定字段的读取权限。

如果您想要执行类似于您建议的操作,则可能需要重新构建数据,以便将非公开数据放在单独的文档中。您很可能希望通过将私有数据放入子集合中来实现此目的。所以你最终会得到这样的东西......

collection: [
  document: {
    y: 'y'
    private-collection: [
      document: {
        x: 'x'
      }
    ]
  }
]

然后你会设置安全规则,如:

service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/{document} {
      allow read: if true;
      match /private-collection/{otherdoc} {
        allow read: if someOtherRuleThatYouAddHere();
      }
    }
  }
}