有替代writeFields的方法吗? [英] Is there an alternative to 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屋!