我试图找出如何删除firestore文档上的敏感字段。例如,我的收藏是一个群组信息。该组受PIN码字段保护。任何想加入该组的人都必须知道密码。
与此同时,我想让用户查询可以加入的群组。对于查询部分,我不希望返回具有密码信息的组信息。无论如何,我们是否要从Firestore文档中删除敏感字段以便阅读事件?
云功能仅支持写事件。 1可能的解决方案是在写事件上使用云函数,并将pin码放在单独的文档中。有更好的解决方案吗?感谢。
我的群组架构是:
group: {
name: string,
pinCode: string
}
答案 0 :(得分:3)
用户可以访问文档,也可以不访问文档。 Firestore中没有属性级访问控制。
因此,要完成您想要的工作,您需要将公共和私人信息存储在单独的文档中。
您可以在同一个集合中创建包含私人信息的第二个文档,然后使用以下方法保护它们:
match /databases/{database}/documents {
match /groups/{group} {
allow read: if resource.data.visibility != "private"
}
}
或者(并且更安全)您可以为私人文档创建单独的集合。
答案 1 :(得分:0)
您可以创建Firebase函数,该函数仅返回您需要的字段(不敏感),此处为示例:
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集合时仅填充所需的字段。