映射Firestore安全规则中的字段

时间:2020-04-11 18:12:49

标签: google-cloud-firestore firebase-security

我如何拒绝除以下字段以外的所有其他请求

客户代码:

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
}

})

}

传入请求中有两个字段。updatedOnupdatedBy。 仅当请求中只有确切的字段updatedOnupdatedBy时,该请求才被允许。如果请求中包含这两个字段以外的其他字段,则该请求将被拒绝。

问题出在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 个答案:

答案 0 :(得分:1)

听起来您只需要传递带有所有字段的任何数组来检查:

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