поля полей в правилах пожарной безопасности - PullRequest
0 голосов
/ 11 апреля 2020

Как я могу отклонить все другие запросы, кроме полей ниже

код клиента:

constructor(private afs:AngularFireStore){}

updateOrder(docId:string){

return this.afs.collection("orderCollection")
.doc(docId)
.update({

updatedOn:firebase.firestore.FieldValue.serverTiimestamp(),

updatedBy:{
uid:currentuser.uid
email:currentuser.email
}

})

}

Во входящем запросе есть два поля. updatedOn и updatedBy. Запрос будет разрешен, только если запрос содержит только точные поля updatedOn и updatedBy. Если запрос содержит поля, отличные от этих двух полей, он будет отклонен.

Проблема связана с updatedBy поле. Это поле карты. Как я могу проверить поле карты, используя правило безопасности?

Вот мое правило безопасности

 match /orders/{order} {

  allow read, write: if false;
  allow create:if false;

  allow update:if hasOnlyFields(['updatedOn'])
}

function hasOnlyFields(keys) {
 return request.resource.data.keys().hasOnly(keys) 
}

, используя вышеуказанную функцию, я легко могу проверить простое поле updatedOn. Но как проверить поле карты updatedBy, используя вышеуказанную функцию hasOnlyField ?. Если это невозможно с помощью функции hasOnlyField, как я могу проверить, что входящий запрос имеет только указанное поле карты и простое поле?

1 Ответ

1 голос
/ 11 апреля 2020

Похоже, вам просто нужно передать любой массив со всеми полями для проверки:

allow update:if hasOnlyFields(['updatedOn', 'updatedBy'])
...