Правила безопасности Firebase: публичные и личные данные

У меня есть коллекция подписей, где каждая подпись имеет несколько свойств: public: полное имя, город и затем электронная почта.

Я хочу, чтобы свойство электронной почты было приватным, и я изо всех сил пытался написать правильные правила, чтобы вернуть только полное имя и город. Вот как выглядит мой rules.json:

{
    "rules": {
        "signatures": {
            "$signatureID": {
                "public": {
                    ".read": true
                },
                "email": {
                    ".read": false
                }
            }
        }
    }
}

Когда я перехожу к конечной точке / подписи, я хотел бы получить массив подписей с общедоступными данными и не получать адреса электронной почты.

Пока что мне не повезло, что все заработало так, как я хочу. Я делаю что-то неправильно? Должен ли я структурировать свои данные по-другому?

1 ответ

Решение

Что касается правил безопасности, операции Firebase выполняются по принципу "все или ничего".

В результате при попытке загрузить все данные в /signatures потерпит неудачу, потому что у вашего клиента нет разрешения на чтение всех данных в этом месте, хотя у вас есть разрешение на чтение некоторых данных там. Аналогично, запись в местоположение ведет себя так же, и для продолжения работы требуется полное разрешение.

Чтобы справиться с этим вариантом использования, рассмотрите возможность реструктуризации ваших данных следующим образом:

{
  "rules": {
    ".read": false,
    ".write": false, 
    "signatures-public": {
      ".read": true,
      "$signatureID": {
        // ... public data here
      }
    },
    "signatures-private": {
      "$signatureID": {
        // ... private data here
      }
    }
  }
}
Другие вопросы по тегам