# #javascript #firebase #google-cloud-firestore #firebase-security
Вопрос:
Я использую Firebase Firestore для хранения списка транзакций в коллекции под названием transactions
.
Я использую react для получения транзакции из коллекции, используя URL-адрес с идентификатором документа транзакции: http://myurl.com/h1kj54h2jk35h
const id = match.params.id;
firebase.firestore().collection('transactions').doc(id).get()
Таким же образом я создаю новый документ. У меня нет аутентификации на базе firebase.
Как я могу защитить свои правила Firestore:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /transactions/{id} {
allow read, write;
}
}
}
Если я не разрешу запись, я не смогу создавать новые транзакции.
Если я не разрешу чтение, я не смогу прочитать транзакцию, но я не хочу разрешать чтение всех транзакций. Только один раз, когда идентификатор из URL действителен.
Таким образом, я ищу способ защитить свою базу данных от нежелательного создания документов и нежелательного чтения документов.
Ответ №1:
Я думаю, вы ищете то, что называется детализированными операциями. По этой ссылке:
В некоторых ситуациях полезно разбить чтение и запись на более детализированные операции. Например, ваше приложение может захотеть применить другие условия при создании документа, чем при удалении документа. Или вы можете разрешить чтение одного документа, но запретить большие запросы.
read
Правило может быть разбито наget
иlist
, в то времяwrite
как правило может быть разбито наcreate
,update
, иdelete
.
Поэтому, если вы хотите разрешить только создание новых документов и получение документа, для которого пользователь должен знать идентификатор, это будет:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /transactions/{id} {
allow create, get;
}
}
}
Комментарии:
1.
{id}
Говорит ли заполнитель, что действителен только этот идентификатор? Я думал, что это заполнитель для любого документа внутриtransactions
. Этоwrite
также было бы нормально, если бы я хотел иметь возможность обновлять документ, когда в URL указан правильныйid
адрес? это безопасно для нежелательных записей?2. А, понятно. Как я понял,
{id}
это просто заполнитель для любого документа.get
Указывает, чтобы получить только один документ, который я прошу. Хотяlist
это не разрешено, запустить acurl -X GET "https://firestore.googleapis.com/v1beta1/projects/test-375f8/databases/(default)/documents/transactions"
для просмотра базы данных невозможно. я прав?3. Это немного зависит от того, какие учетные
curl
данные использует этот запрос для доступа к базе данных. Но любой доступ, который попадает в правила безопасности, сможет создавать только новые транзакции или получать конкретную транзакцию, идентификатор которой он уже знает с помощью этих правил.4. Вы бы защитили такие конфиденциальные данные?