有替代writeFields的方法吗? [英] Is there an alternative to writeFields?

查看:47
本文介绍了有替代writeFields的方法吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

本文指出"[writeFields]现在已弃用.".
另外,我找不到writeFields的任何文档,甚至没有作为 Request .

This article stated that "[writeFields] is now deprecated".
Additionally, I cannot find any documentation for writeFields, it is not even listed as part of Request in the documentation anymore.

Cloud Firestore安全规则面临的问题是,验证仅修改特定字段需要大量条件.
例如,如果我要验证文档的唯一修改值是cakes,则必须编写以下规则:

The problem I am facing with Cloud Firestore Security Rules is that verifying that only particular fields are modified requires massive amounts of conditions.
For example, if I want to verify that the only modified value of a document is cakes, I have to write the following rule:

allow update: if request.resource.data.size() == 20
              && request.resource.data.likes == resource.data.likes
              && request.resource.data.name == resource.data.name
              && request.resource.data.date == resource.data.date
              && request.resource.data.body == resource.data.body
              && request.resource.data.title == resource.data.title
              && request.resource.data.tags == resource.data.tags
              && request.resource.data.comments == resource.data.comments
              && request.resource.data.answers == resource.data.answers
              && request.resource.data.awards == resource.data.awards
              && request.resource.data.image == resource.data.image
              && request.resource.data.link == resource.data.link
              && request.resource.data.format == resource.data.format
              && request.resource.data.type == resource.data.type
              && request.resource.data.user == resource.data.user
              && request.resource.data.views == resource.data.views
              && request.resource.data.reports == resource.data.reports
              && request.resource.data.roles == resource.data.roles
              && request.resource.data.category == resource.data.category
              && request.resource.data.votes == resource.data.votes
              && request.resource.data.cakes is int;

使用writeFields完全相同规则应如下所示:

Using writeFields, the exact same rule would have looked like this:

allow update: if request.writeFields.hasOnly(['cakes']) && request.resource.data.cakes is int;

如何减小规则的代码大小?/writeFields的替代方法是什么?

What can I do to decrease the code size of my rules / what is the alternative to writeFields?

文档中提到了两个限制,问题更严重:

There are two limits mentioned in the documentation that make this problem even worse:

  • 每个请求评估的最大表达式数:1,000

  • Maximum number of expressions evaluated per request: 1,000

规则集的最大大小:64 KB

Maximum size of a ruleset: 64 KB

我希望在某种程度上能够达到这两个限制.

I expect to reach both of these at some point with this limitation.

推荐答案

是的!现在有一个替代品,称为地图差异".检查此语法:

Yes! There is now a replacement called "Map Diffs". Check this syntax out:

allow update: if request.resource.data.diff(resource.data).affectedKeys().hasOnly(['cakes']) 
              && request.resource.data.cakes is int;

这篇关于有替代writeFields的方法吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆