首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firestore:删除文档中的敏感字段

Firestore:删除文档中的敏感字段
EN

Stack Overflow用户
提问于 2017-11-14 15:27:33
回答 2查看 1.1K关注 0票数 2

我正在尝试弄清楚如何删除firestore文档上的敏感字段。例如,我的集合是一个组信息。该组受pin代码字段保护。任何想要加入这个群的人都必须知道密码。

同时,我想让用户查询可以加入的组。对于查询部分,我不想返回带有管脚代码信息的组信息。我们是否一定要从Firestore for reading事件的文档中删除敏感字段?

云函数仅支持write事件。1可能的解决方案是在写入事件时使用云函数,并将pin代码放在单独的文档中。有没有更好的解决方案?谢谢。

我的组模式是:

代码语言:javascript
复制
group: {
    name: string,
    pinCode: string
}
EN

回答 2

Stack Overflow用户

发布于 2017-11-14 22:56:11

用户可以访问文档,也可以不访问文档。Firestore中没有属性级别的访问控制。

因此,要实现您想要的功能,您需要将公共和私有信息存储在不同的文档中。

您可以使用同一集合中的私有信息创建第二个文档,然后使用以下命令保护它们:

代码语言:javascript
复制
match /databases/{database}/documents {
    match /groups/{group} {
      allow read: if resource.data.visibility != "private"
    }
}

或者(也更容易保护),您可以为私有文档创建一个单独的集合。

票数 3
EN

Stack Overflow用户

发布于 2019-08-12 20:21:13

您可以创建一个Firebase函数,该函数仅返回所需(非敏感)的字段,这里是一个示例:

代码语言:javascript
复制
exports.getTopUsers = functions.https.onCall(async (data) => {
   const users = [];
   return db.collection('users').orderBy('bids').limit(data.limit).get()
   .then((querySnapshot) => {
      querySnapshot.forEach((user) => {
         users.push({
            diplayName: user.get('displayName'),
         });
      });
      return {
         topUsers: users,
      };
   })
   .catch((err) => {
      console.error(err);
   });
});

因此,您需要创建一个单独的数组(该数组将被返回),并在迭代Firestore集合时只填充您想要的字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47279960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档