Правила безопасности 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 это удастся.

Это рассматривается в разделе документации, правила не являются фильтрами. Также смотрите ответ Михаила Лехенбауэра здесь: Ограничение доступа детей / полей с правилами безопасности

Другие вопросы по тегам