Firebase: сомнения относительно правила удаления - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь протестировать свое правило удаления с помощью Firebase Simulator и хочу быть уверенным, что я делаю это нормально.

Правило:

match /categories/{document=**} {
  allow delete: if get(/databases/$(database)/documents/categories/$(document)).data.isActive == false;
}

Когда я тестирую он использует: / Categories / xrzoUrdHZ0w9TJO38PiK, кажется, работает, потому что эта категория имеет поле 'isActive' == false.

Но я не уверен в этом - $ (документ). Это не должно быть $ (request.resource.data.id) или что-то в этом роде?

1 Ответ

2 голосов
/ 12 февраля 2020

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

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

Правила безопасности имеют доступ к новым данным (запрос пользователя) и данным, присутствующим в облаке

//checking flag from user requested data
request.resource.data.isActive
//checking flag from data present in document in cloud firestore
resource.data.isActive

Используйте следующее правило для разрешить удаление, если запрашиваемые пользователем данные isActive имеет значение false

match /categories/{document=**} {
  allow delete: if request.resource.data.isActive == false;
}

и следовать правилу, чтобы разрешить удаление, если isActive флаг из данных, представленных в документе, равен false

match /categories/{document=**} {
  allow delete: if resource.data.isActive == false;
}
...