Как ограничить в правилах безопасности Cloud Firestore - PullRequest
0 голосов
/ 06 мая 2020

Я делаю благотворительное приложение, которое использует Firebase SDK для прямого общения с Cloud Firestore из приложения.

Любой (пользователь или нет) может создать благотворительную организацию, каждая благотворительная организация находится в городе.

Если пользователь добавляет новую, я хочу, чтобы другие пользователи не создавали новую благотворительную организацию в течение 30 минут в городе, в котором он создал благотворительную организацию.

И я думаю, что это способ реализовать 30-минутную продолжительность, но как я могу сделать это в каждом городе

match /charity/{document=**} {
  allow create: if isCalm(); 
  request.time > resource.data.timestamp + duration.value(30, 'm');
 }
}

Если вы не поняли, вот пример: скажем, у меня есть 3 города (AB и C), если пользователь создает благотворительную организацию в городе А Я хочу запретить кому-либо создавать благотворительные организации в городе А в течение 30 минут ..

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Я сам не пробовал.

Если у вас есть 1 коллекция под названием Cities и в ней подколлекция под названием charities. Затем, когда вы обращаетесь к своей конкретной подколлекции c charity в go и пишете новый благотворительный документ, правило безопасности может гарантировать, что поле родительского (город) соответствует вашему условию не менее 30 минут. Вам нужно будет создать новое поле, lastModified или lastCharityCreatedAt в документе города. Таким образом, вам не нужны облачные функции.

В итоге: отслеживайте последнюю запись в родительском документе, чтобы вы могли проверить ее, когда вам нужно.

1 голос
/ 06 мая 2020

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

...