Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Понимать правила базы данных Firebase в реальном времени

Правила базы данных Firebase Realtime определяют, кто имеет права на чтение и запись в вашей базе данных, как структурированы ваши данные и какие индексы существуют. Эти правила живут на серверах Firebase и применяются автоматически в любое время. Каждый запрос на чтение и запись будет выполнен, только если ваши правила позволяют это. По умолчанию ваши правила не разрешают кому-либо доступ к вашей базе данных. Это необходимо для защиты вашей базы данных от злоупотреблений до тех пор, пока у вас не будет времени настроить свои правила или настроить аутентификацию.

Правила баз данных реального времени имеют JavaScript-подобный синтаксис и бывают четырех типов:

Типы правил
.читать Описывает, разрешено ли чтение данных пользователям.
.записывать Описывает, если и когда данные могут быть записаны.
.validate Определяет, как будет выглядеть правильно отформатированное значение, имеет ли оно дочерние атрибуты, и тип данных.
.indexOn Определяет дочерний элемент для индексации для поддержки упорядочения и запросов.

Обзор безопасности базы данных в реальном времени

База данных Firebase Realtime предоставляет полный набор инструментов для управления безопасностью вашего приложения. Эти инструменты упрощают аутентификацию ваших пользователей, обеспечение прав пользователей и проверку входных данных.

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

Аутентификация

Распространенным первым шагом в защите вашего приложения является идентификация ваших пользователей. Этот процесс называется аутентификацией . Вы можете использовать Firebase Authentication, чтобы пользователи могли войти в ваше приложение. Аутентификация в Firebase включает в себя поддержку обычных методов аутентификации, таких как Google и Facebook, а также вход по электронной почте и паролю, анонимный вход и многое другое.

Идентификация пользователя является важной концепцией безопасности. У разных пользователей разные данные, а иногда у них разные возможности. Например, в приложении чата каждое сообщение связано с пользователем, который его создал. Пользователи также могут удалять свои собственные сообщения, но не сообщения других пользователей.

авторизация

Идентификация вашего пользователя - это только часть безопасности. Как только вы узнаете, кто они, вам понадобится способ контролировать их доступ к данным в вашей базе данных. Правила базы данных в реальном времени позволяют вам контролировать доступ для каждого пользователя. Например, вот набор правил безопасности, который позволяет любому читать путь /foo/ , но никто не может писать в него:

{
  "rules": {
    "foo": {
      ".read": true,
      ".write": false
    }
  }
}

.read и .write каскадируются, поэтому этот набор правил предоставляет доступ на чтение для любых данных в пути /foo/ а также для любых более глубоких путей, таких как /foo/bar/baz . Обратите внимание, что .read и .write в базе данных, переопределяют более глубокие правила, поэтому доступ на чтение к /foo/bar/baz все равно будет предоставлен в этом примере, даже если правило по пути /foo/bar/baz оценивается как false.

Правила базы данных в реальном времени включают встроенные переменные и функции, которые позволяют ссылаться на другие пути, временные метки на стороне сервера, информацию об аутентификации и многое другое. Вот пример правила, которое предоставляет авторизованным пользователям доступ на запись к /users/<uid>/ , где <uid> - это идентификатор пользователя, полученный с помощью Firebase Authentication.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Валидация данных

База данных Firebase Realtime не содержит схем. Это позволяет легко что-то менять по мере разработки, но как только ваше приложение будет готово к распространению, важно, чтобы данные оставались согласованными. Язык правил включает в .validate правило .validate которое позволяет применять логику проверки с использованием тех же выражений, которые используются для .read и .write . Единственное отличие состоит в том, что правила проверки не каскадируются , поэтому все соответствующие правила проверки должны иметь значение true, чтобы разрешить запись.

Эти правила требуют, чтобы данные, записанные в /foo/ были длиной не более 100 символов:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

Правила проверки имеют доступ ко всем тем же встроенным функциям и переменным, что и правила .read и .write . Вы можете использовать их для создания правил проверки, которые будут знать данные в других местах вашей базы данных, личность вашего пользователя, время сервера и многое другое.

Определение индексов базы данных

База данных Firebase Realtime позволяет упорядочивать и запрашивать данные. Для небольших размеров данных база данных поддерживает специальные запросы, поэтому индексы обычно не требуются во время разработки. Однако перед запуском приложения важно указать индексы для любых запросов, которые вы должны обеспечить, чтобы они продолжали работать по мере роста вашего приложения.

Индексы указываются с использованием правила .indexOn . Вот пример объявления индекса, который будет индексировать поля высоты и длины для списка динозавров:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Следующие шаги