Если я правильно понимаю ваш вопрос, вы обеспокоены тем, что пользователи могут читать /users/$user
, даже если их идентификатор пользователя не совпадает с тем, что хранится в $ user.В случае этих правил вы сделали так, чтобы любой, прошедший проверку подлинности через Facebook, мог прочитать любое значение, хранящееся в /users/$user
, и чтобы заблокировать его, вы на самом деле хотите, чтобы ваше правило ".read" совпадало с вашим ".write "правило. ЕСЛИ Я неверно истолковал вашу проблему, вы можете перестать читать сейчас.
Один из способов проверки действительно простых правил - использовать имитатор базы данных реального времени Firebase, встроенный в нашу веб-консоль.Я встроил ваши примеры правил как (изменения форматирования и ведущих {}, которые вы пропустили):
{"rules": {
"users": {
"$user": {
".read": "auth.provider === 'facebook'",
".write": "auth !== null && auth.uid === $user"
}
}
}}
С этим симулятором вы можете видеть, что если я пытаюсь читать, когда не аутентифицирован, язаблокирован: читать без аутентификации
Но когда я читаю как любой пользователь, он позволяет мне: читать как любой пользователь Facebook
Если я нажимаю наподробно, это скажет мне точно, почему (мой поставщик аутентификации - Facebook): подробности того, почему правило прошло
С другой стороны, вы увидите, что я не могу впоследствии написатьв этот узел: запись отклонена как любой пользователь , поскольку ваше правило записи должно быть правильным, если только мой идентификатор пользователя также не совпадает: запись принята как пользователь-владелец
Я надеюсь, что этопомогает!