Правила Firebase / VueFire проходят валидатор, но не возвращают результатов
Я реализовал правила в Firebase, чтобы ограничить доступ к данным, и когда я имитирую права на чтение / запись в представлении Firebase Validator, разрешение предоставляется. Но когда я бегу через VueFire, результаты не возвращаются.
Это структура базы данных:
<firebase-id>:
-chat:
-messages:
- message1
- message2
- message3
Это мои правила от Firebase:
{
"rules": {
"chat": {
"messages": {
"$message": {
".read": "auth != null && data.child('uid').val() == auth.uid",
".write": "auth != null && data.child('uid').val() == auth.uid"
}
}
}
}
}
Я вошел в систему и прошел проверку подлинности, но я не получил результатов.
Я пытался предоставить доступ при аутентификации, который работает, когда я ставлю правило на уровень чата, уровень сообщений, но не, если я ставлю его на уровне $ message, что указывает на то, что VueFire имеет проблемы с подстановочными знаками ($)?
Кто-нибудь еще испытывал нечто подобное? или есть идеи что не так?
Обновление: я обнаружил, что при попытке получить доступ к массиву сообщений, как я пытаюсь, происходит сбой проверки.
Фрагмент кода:
// Generate ref to messages fails validation
export const messages = firebaseRef.child('chat').child('messages');
// Generate ref to specifi message create by user passes validation
export const messages = firebaseRef.child('chat').child('messages').child('<message id>')
Таким образом, доступ к этому пути не предоставляется, но только если я пытаюсь получить одно конкретное сообщение. Но как я могу получить массив, который включает только элементы, которые проходят проверку?
1 ответ
После еще одного исследования я обнаружил, что то, чего я пытался достичь, невозможно в Firebase, поэтому я должен реструктурировать свою базу данных, чтобы добиться такого поведения. Для получения дополнительной информации см. Ссылку на другой пост Stackru: правила безопасности Firebase для дочерних элементов в массивах.