【问题标题】:Only allow certain fields (Firestore Rules)仅允许某些字段(Firestore 规则)
【发布时间】:2020-09-22 02:00:12
【问题描述】:

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

有人知道解决办法吗?因此,如果请求包含不允许更新的字段,则不允许更新。

亲切的问候, 乔什

【问题讨论】:

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


    【解决方案1】:

    规则中不允许循环。但自 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

    【讨论】:

      猜你喜欢
      • 2020-08-17
      • 2020-09-18
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 2019-03-06
      相关资源
      最近更新 更多