仅允许某些字段(Firestore规则)

时间:2020-06-03 11:26:01

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

我正在尝试创建一个规则,该规则仅允许在我的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”。

有人知道解决方案吗?因此,如果请求通过不允许更新的字段来处理,则不允许更新。

亲切的问候, 乔什

1 个答案:

答案 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