我正在尝试创建一个规则,该规则仅允许在我的Firestore规则内更新某些字段,因此我考虑做这样的功能:
function checkFieldsSent() {
for(field in request.resource.data) {
if (!(field in ['userRole', 'userName', 'messageType', 'userMessage', 'userHonourLevel', 'userAvatar', 'userChatPosted', 'userLevel', 'userChatMessage'])) { return false }
}
return true
}
当然,您可以想象,firestore抱怨在该函数中使用“ FOR”和“ Return”。
有人知道解决方案吗?因此,如果请求通过不允许更新的字段来处理,则不允许更新。
亲切的问候, 乔什
答案 0 :(得分:2)
规则中不允许使用循环。但是自2月以来,有一种新的数据类型提供了一个不错的解决方案:Map.Diff。
function checkFieldsSent() {
let forbiddenfields = ['userRole', 'userName', 'messageType', 'userMessage', 'userHonourLevel', 'userAvatar', 'userChatPosted', 'userLevel', 'userChatMessage'];
return !request.resource.data.diff(resource.data).affectedKeys().hasAny(forbiddenfields);
}
更多详细信息here