Я не смог найти ничего по теме, так что вот так.
Я создаю приложение с базой данных Firebase Cloud Firestore для пользователей.
Моя цель - «не дать людям украсть все адреса электронной почты, но сделать их доступными для поиска»
Мои данные пользователя сохраняются для каждого пользователя следующим образом:
в /users/{userId}
{
email: 'user@gmail.com',
displayName: 'James Liverstone'
}
Я могу защитить пользовательские данные с помощью следующих правил:
match /users/{userId} {
allow write, read: if request.auth.uid == userId
&& request.auth.uid != null;
}
Но что, если я хочу сделать так, чтобы кто-то мог искать друга в моем приложении, по электронной почте или по отображаемому имени?
например.
const searchVal = 'user@gmail.com' // search value from <input>
firebase.firestore().collection('users').where('email', '==', searchVal)
Это невозможно из-за правила read
. Однако, если я открою чтение, чтобы позволить всем, вы можете украсть все адреса электронной почты моих пользователей, например, так:
firebase.firestore().collection('users').get()
как я могу запретить людям красть все адреса электронной почты, но при этом делать их доступными для поиска?
Итак, вкратце:
- разрешить:
firebase.firestore().collection('users').where('email', '==', searchVal)
- предотвратить:
firebase.firestore().collection('users').get()