Как я могу ограничить удаление только одного документа за один раз в пожарном хранилище, используя правило безопасности? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть коллекция под названием «клиенты», и я разрешил некоторым пользователям чтение и запись этой коллекции. Моё требование - я должен ограничивать операцию удаления только одним документом за раз, чтобы избежать массового удаленияcollection.Как я могу добиться этого, используя правило безопасности firestore.? Теперь я попробовал с приведенным ниже кодом

match /customers/{customer=**} {

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

    function isRole(roles) {
        return get(/databases/$(database)/documents/Teachers/$(request.auth.uid)).data.permissions.pages.hasAny(roles);
        }

    function isSize(size){
      return request.resource.data.size()==size;
    }

    allow read: if isSignedIn()&&isRole(['create','modify']);
    allow create,update:if isSignedIn()&&isRole(['create','modify']);;
    allow delete:if isSignedIn()&&isSize(1)

 }

Вот код для удаления операции;

async(id:string){

  const batch=afs.firestore.batch();
  const coll=await afs.firestore.collection('customers').ref.limit(1).where('id','==',id).get();
  for(const i of coll.docs){
   const ref= await afs.firestore.collection('customers').doc(i.id);
   await batch.delete(ref);
  }
  return await batch.commit();

}

ноПриведенное выше правило всегда возвращает отклоненное разрешение при выполнении операции удаления.

1 Ответ

1 голос
/ 30 мая 2019

В настоящее время это невозможно. Правила безопасности Firebase не позволяют ограничить скорость или объем любой операции. Также нет способа определить, является ли текущая операция частью пакета или транзакции.

Даже если бы был способ определить, есть ли пакетная операция, пользователь все равно может повторно вызывать delete() для достижения того же эффекта.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...