Правила безопасности Firebase?
Похоже, мне тяжело с правилами безопасности на базе огня. Я прочитал руководства, но результаты симулятора не достаточно наглядны (было бы намного проще, если бы мы могли просто навести курсор на узел, и появилась бы кнопка, где мы могли бы обновить правила).
Вот как выглядит моя структура:
chats
- randomChatId01
- name: "awesome chat"
- members:
- userId01 : true
- userId02 : true
- randomChatId02
- members:
- userId02 : true
- randomChatId03
- members:
- userId01 : true
- userId02 : true
- ...
Я только хочу, чтобы пользователь мог читать узлы чата, в которых элементы дочернего узла узла содержат аутентифицированный пользовательский auth.uid.
Таким образом, в этом случае, если бы userId01 был зарегистрирован, она имела бы доступ только на чтение к randomChatId01 и randomChatId03.
Это правило у меня есть:
{
"rules": {
"chats": {
"$chat": {
".read": "data.child('members').val().contains(auth.uid)"
}
}
}
}
Однако в симуляторе возвращается следующее:
Attempt to read /chats with auth={"provider":"anonymous","uid":"eF4ztDEXz7"}
/
/chats
No .read rule allowed the operation.
Read was denied.
1 ответ
Это потому, что правила безопасности Firebase оцениваются в месте, из которого вы читаете.
Ты пытаешься читать /chats
, Пользователь не имеет разрешения на чтение /chats
, так что операции сразу не удаются.
Если вы читаете /chats/randomChatId01
как userId01
это удастся.
Это рассматривается в разделе документации, правила не являются фильтрами. Также смотрите ответ Михаила Лехенбауэра здесь: Ограничение доступа детей / полей с правилами безопасности