我如何拒绝除以下字段以外的所有其他请求
客户代码:
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
中,如何验证传入请求仅具有指定的映射字段和纯字段?
答案 0 :(得分:1)
听起来您只需要传递带有所有字段的任何数组来检查:
allow update:if hasOnlyFields(['updatedOn', 'updatedBy'])