request.resource map上的size()函数不是我期望的

时间:2019-05-06 04:01:32

标签: firebase google-cloud-firestore firebase-security-rules

使用Firestore规则,我试图确保作为地图对象的传入请求仅具有1个条目(即只有1个键)。使用.size()== 1总是会导致权限不足,而使用.size()> 1总是正确的。

请求来自此:

const batch = this.db.firestore.batch();
batch.update(frameUserRef, {
    [`users.${this.authService.currentUser.uid}.pictureCount`]: firebase.firestore.FieldValue.increment(1)
});
batch.commit();

我正在尝试使用诸如

之类的Firestore规则
request.resource.data.users.keys().size() == 1

// NOTE: This doesn't work either
request.resource.data.users.size() == 1

但是,这永远不会如我所料。我试图阻止某人在此通话中附加其他更新,即

const batch = this.db.firestore.batch();
batch.update(frameUserRef, {
    [`users.${this.authService.currentUser.uid}.pictureCount`]: firebase.firestore.FieldValue.increment(1),
    [`users.${ANOTHER_USER_ID_HERE}.pictureCount`].pictureCount: 100000 // MALICIOUS REQUEST
});
batch.commit();

我做错什么了吗?还是我误解了.size()函数?任何信息表示赞赏。

编辑:经过更多测试,看来.size()是Firestore中当前地图的大小(即地图已经有4个条目,我正尝试仅更新1和.size()== 4)。它似乎不是来自请求,就像我想request.resource.data从中提取...。 有人对此有见识吗?

0 个答案:

没有答案