Я реализовал управление доступом к данным, используя Правила Firestore , который прекрасно работает всякий раз, когда я получаю данные из базы данных.
Однако доступ к любым данным, которые были извлечены ранее,не контролируется правилами на устройстве.
Представьте себе ситуацию, когда приложение переключает пользователей Firebase (выйдите из системы, затем войдите в систему с другим пользователем Firebase) или изменит любое другое свойство, на которое опирается управление доступом. Несмотря на то, что я получаю правильное отклонение при попытке обновить данные из удаленной базы данных, то, что кэшируется на устройстве, все еще доступно из-за отсутствия локального применения правил.
Это вызывает потенциальные проблемы с конфиденциальностью (данные изпредыдущий пользователь может просочиться к новому пользователю). Если приложение разработано правильно, тогда фильтрация на устройстве может минимизировать риск, но все делают ошибки. Например, вы выбираете все транзакции, которые доступны пользователю, на основе правила Firestore, которое проверяет поле в каждой транзакции по идентификатору пользователя. Когда пользователь изменился и данные были кэшированы, новый пользователь будет иметь доступ ко всем транзакциям в кэше, независимо от того, принадлежит он ему или ей. Вы можете возразить, что этот дизайн ошибочен, и, возможно, вы правы, но совершить такую ошибку слишком просто.
Было бы лучше просто удалить все кэшированные данные, когда обстоятельства радикально изменятся, например, привремя выхода. Это возможно, вызвав метод Firestore.clearPersistence () , но есть большая загвоздка: вы должны перезапустить (холодный запуск) приложение, потому что, если вы сделали какой-либо доступ к БД, это не получится. Перезапуск приложения с нуля имеет много недостатков и может оказаться невозможным даже при любых обстоятельствах.
Пожалуйста, сообщите, если есть какой-либо лучший способ решения этой проблемы.