我有一个email
集合,任何用户(公开)都可以在其电子邮件中添加新文档。
docID: {
email: 'my@user.com'
}
现在,我对email
集合的安全性规则是:
match /email/{documentID} {
allow read: if request.auth.token.admin == true;
allow create: if true;
}
因为我不希望用户能够阅读其他用户的电子邮件。
但是我希望客户端代码能够查询用户自己的电子邮件,以避免在数据库中重复。所以我希望我的客户代码能够做到这一点:
const querySnapshot = await
props.firebase.firestore().collection('email').where('email', '==', email).get();
问题
我应该如何编写安全规则以实现该行为?
我不希望他们能够查询完整的email
集合。
答案 0 :(得分:2)
我认为这不可能。考虑改为编写一个将电子邮件地址作为输入的Cloud Function,查询电子邮件集合,然后向客户端返回一个布尔值,指示是否存在。
请注意,这使任何人都可以有效地查询任何电子邮件地址,而不仅仅是“他们自己的”(无论您如何定义所有权)。