У меня две проблемы:
- Вы не можете изменить период '.'символ в «правилах Firebase», когда вы используете что-то вроде «request.auth.token.email» (очень ограниченные опции для работы со строками и объединения, функции замены не поддерживаются)
- Вы не можете использовать электронную почту вВаш запрос из-за того же символа точки, что и «ключ», при использовании hashmap.
Отказ от подхода HashMap из-за проблем, описанных выше, я пытаюсь исследовать массивы.Есть ли какой-нибудь способ получить зарегистрированную электронную почту пользователя по request.auth.token.email и сравнить ее с «почтовыми» элементами массива в документе?
Например - у меня есть 'bb @ gmail.com 'как зарегистрированный пользователь, я хотел бы получить все документы, в которых массив sharedWith содержит запись bb@gmail.com, и игнорировать остальные документы.Я могу добиться этого в коде, но я хочу настроить это устройство как «правило безопасности», чтобы сделать чтение документа более надежным.
--------- Update ----------- Я попытался разделить и объединить мое правило безопасности, как показано ниже: (ref: Использование функции замены в правилах безопасности firestore )
allow read: if isSignedIn() && resource.data.sharedWith[(request.auth.token.email).split('.').join(',')] in ["true"];
Мой запрос выглядит следующим образом:
db.collection("Sites")
.whereEqualTo("sharedWith.bb@gmail,com","true")
Мой документ содержит следующее:
sharedWith
mm@gmail,com : "true"
bb@gmail,com : "true"
И пользователь вошел как'bb@gmail.com'
Вышеуказанная настройка не работает.Я получаю ошибку "Отказано в разрешении".Я не знаю, что я делаю не так, помогите, пожалуйста.