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

Например, можно настроить правила Firestore таким образом, чтобы они разрешали создание встреч только аутентифицированным пользователям, например тем, кто вошел в систему по электронной почте, через Google Sign-in или другими аутентифицированными способами.

Если вы только начинаете работать с правилами Firestore, ознакомьтесь с этим обзором, посвященным началу работы с правилами Firestore.

Создание правил Firestore

Существует два способа установки правил Firestore:

  1. Используя настройку Firestore в FlutterFlow
  2. Используя консоль базы данных Firestore

1. Использование настроек FlutterFlow Firestore

Для настройки основных правил можно воспользоваться настройками Firestore, доступными прямо в FlutterFlow.

Обзор правил Firestore внутри FlutterFlow

Вы можете управлять следующими операциями, которые могут быть выполнены над документом:

  • Создать: Разрешить пользователям создавать новый документ внутри коллекции.
  • Читать: Разрешить пользователям читать документы в коллекции.
  • Записать: Позволяет пользователям обновлять документ коллекции.
  • Удалить: Разрешить пользователям удалять документы коллекции.
ру 1

Мы предоставляем различные уровни контроля доступа, которые позволяют определить права пользователей на доступ к данным:

  • Все: Предоставляет доступ всем пользователям, как аутентифицированным, так и неаутентифицированным, позволяя им создавать, читать, записывать и удалять документы.
  • Аутентифицированные пользователи: Доступ предоставляется только аутентифицированным пользователям, например, тем, кто вошел в систему через электронную почту, Google Sign-in и т.д. Любой пользователь, вошедший в приложение, может создавать, читать, записывать и удалять документы.
  • Пользователи с метками: Разрешить пользователям читать/обновлять/удалять документ, если они отмечены в этом документе. Например, имеется коллекция «posts» с полем «created_by», представляющим пользователя, создавшего сообщение. Тогда правило «Tagged User» может быть установлено на поле «created_by», чтобы разрешить доступ (чтение/обновление/удаление) к сообщению только в том случае, если вошедший в систему пользователь является тем, кто его создал.
ру 2
  • Коллекция пользователей: Разрешить пользователям, чей идентификатор аутентификации совпадает с идентификатором документа. Совет: Эта опция применима только к коллекции ‘users’.
  • Никто: никому не разрешается создавать/читать/писать/удалять документ.
Для ‘Tagged Users’ документ должен содержать поле, которое может быть либо ссылкой на пользователя, либо строкой с его идентификатором.

Правила по умолчанию, применяемые к новым коллекциям

Когда вы создаете новую коллекцию в Firestore Content Manager, ниже перечислены правила по умолчанию, применяемые к коллекции:

  • Создать -> Все: Все пользователи могут создавать документ.
  • Читать -> Все: Все пользователи могут читать документы.
  • Запись -> Никто: Никто не может обновлять документ.
  • Удалить -> Никто: Никто не может удалить документ.
ру 3

Правило по умолчанию подходит для начала работы, но перед запуском приложения в эксплуатацию следует подумать об ограничении доступа к коллекциям, которые могут содержать конфиденциальную информацию пользователя. Чтобы помочь вам в этом, мы помечаем их как ‘Has Private Data'(). Это покажет вам предупреждение о необходимости обновить правило и ограничить доступ.

Например, только что созданная коллекция «заметки» по умолчанию позволяет всем читать все заметки. В действительности же ее должен иметь возможность читать только тот пользователь, который ее создал. Но поскольку мы пометили ее как «Имеет приватные данные», появится предупреждение, как показано ниже, и вы сможете изменить правила, позволяющие читать заметки только тому пользователю, который их создал.

ру 4

Если вы хотите получить больший контроль над конкретной коллекцией, вы можете удалить сгенерированное FlutterFlow правило, отметив опцию Exclude. После этого можно настроить расширенные или пользовательские правила безопасности с помощью консоли Firestore Database.

Чтобы правила вступили в силу, их необходимо развернуть. Нажмите здесь кнопку Deploy, и вы увидите развернутые правила в Firebase Консоль > База данных Firebase > Правила.

Когда пользователь удаляется из приложения, возможно, потребуется удалить все записи и данные, связанные с этим пользователем. Для этого сначала установите для правила удаления параметр «Пользователи с метками», а затем отметьте опцию ().

ру 5

Пример использования правил Firestore

Рассмотрим пример настройки правил на коллекции todos для следующих требований:

  • Только аутентифицированные пользователи должны иметь возможность создать элемент Todo.
  • Все пользователи (аутентифицированные/неаутентифицированные) могут видеть все элементы Todo.
  • Только пользователь, создавший Todo элемент, может его обновить.
  • Никто не может удалить Todo элемент.

Чтобы настроить правила Firestore для вышеуказанных требований:

  1. В разделе Firestore Rules установите для параметра Создавать значение Аутентифицированные пользователи.
  2. Установите для параметра Чтение значение Все.
  3. Для записи установите значение Пользователи с метками. В результате откроется всплывающее окно Tag Users.
    1. В раскрывающемся списке щелкните на Unset и выберите поле, содержащее ссылку на пользователя или его идентификатор.
    2. Нажмите кнопку Сохранить изменения.
  4. Установите для параметра Удалить значение Никто.
  5. Теперь можно развернуть правила.
Правила, приведенные в примерах, являются упрощенными. Необходимо тщательно разобраться в своих требованиях и установить соответствующие правила.
ру 6

2. Использование консоли базы данных Firestore

Для настройки более сложных или пользовательских правил можно использовать консоль Firebase Cloud Firestore Console.

Рассмотрим пример настройки правил для коллекции todos для следующих требований:

  • Чтобы создать элемент коллекции Todo, пользователь должен быть аутентифицирован и верифицирован по электронной почте или телефону, и это должен быть действительный элемент Todo.
  • Все пользователи (аутентифицированные/неаутентифицированные) могут видеть все элементы Todo.
  • Только пользователь, создавший элемент Todo, может обновить его с помощью действительных деталей Todo.
  • Удалить Todo элемент может только пользователь, создавший его.

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

  1. Откройте консоль Firebase вашего проекта и щелкните на Firestore Database в левом боковом меню.
  2. Выберите вкладку Правила.
  3. Вставьте следующий код и нажмите на кнопку Опубликовать.

rules_version = ‘2’;

service cloud.firestore {
match /databases/{database}/documents {

// 1.
function isSignedIn() {
return request.auth != null;
}

// 2.
function verified() {
return request.auth.token.email_verified || request.auth.token.phone_number;
}

// 3.
function isValidItem() {
return request.resource.data.name.size() > 0 ;
}

match /todos/{document} {
// 4.
allow create: if isSignedIn() && verified() && isValidItem();
// 5.
allow read: if true;
// 6.
allow write: if isValidItem() && resource.data.created_by == /databases/$(database)/documents/users/$(request.auth.uid);
// 7.
allow delete: if resource.data.created_by == /databases/$(database)/documents/users/$(request.auth.uid);
}

match /users/{document} {
allow create: if request.auth.uid == document;
allow read: if true;
allow write: if request.auth.uid == document;
allow delete: if false;
}

match /{document=**} {
allow read, write: if
request.time < timestamp.date(2022, 3, 4);
}
}
}

Вот краткое описание того, что происходит в приведенном выше коде:

  1. isSignedIn(): Проверяет, аутентифицирован ли пользователь.
  2. verified(): Проверяется, верифицирован ли пользователь по электронной почте или телефону.
  3. isValidItem(): Проверяется, не пуст ли элемент Todo.
  4. create: Разрешает создавать Todo элемент только в том случае, если пользователь аутентифицирован, верифицирован и создал действительный Todo элемент.
  5. read: Разрешить всем пользователям видеть все Todo элементы.
  6. write: Разрешить обновление Todo элемента с действительными данными пользователю, который его создал.
  7. delete: Разрешить удаление Todo элемента пользователю, который его создал.
ру 7

Развернуть

Я текстовый блок. Нажмите на кнопку изменить чтобы изменить этот текст. Лорем ипсум долор сит амет, сонсектетур адписцинг элит. Ут элит теллус, лктус нек улламкорпер маттис, пулвинар дапибус лео

Чтобы развернуть правила Firestore, достаточно нажать кнопку Deploy.

Перед окончательным развертыванием новых правил появится всплывающее окно с предложением просмотреть внесенные изменения. Здесь можно проверить разницу между версиями правил Firestone «до» и «после», а затем нажать кнопку Deploy Now.

Развертывать правила необходимо при каждом изменении.
ру 8

Возврат к предыдущим правилам

Вернуться к предыдущему состоянию правил можно с помощью консоли Firebase Cloud Firestore Console:

  1. Откройте консоль Firebase вашего проекта и щелкните на Firestore Database в левом боковом меню.
  2. Выберите вкладку Правила.
  3. Выберите и скопируйте предыдущее правило из левого бокового меню.
  4. Выберите текущее правило в левом боковом меню и вставьте предыдущее правило.
  5. Нажмите на кнопку Опубликовать.
ру 9

Подробнее

Узнайте больше о создании пользовательских правил Firestore.

Вопросы и ответы

При развертывании правил вы получаете ошибку «Расположение облачного ресурса не установлено», «Похоже, что вы еще не использовали Cloud Firestore в этом проекте» или красное предупреждение.

ру 10
ру 11

Ответ: Если вы столкнулись с подобной проблемой, то, скорее всего, в вашем проекте Firebase не задано значение ‘Default GCP resource location’. Чтобы решить эту проблему, выполните следующие действия:

  • Во-первых, убедитесь, что вы настроили Cloud Firestore.
  • Затем перейдите по второй ссылке (из ошибки) и установите местоположение ресурса GCP.
ру 12
ру 13