使用Firestore,如果counter
的值不高于已存储的值,我想阻止写入文档。counter
是文档的一个字段,每次新写入都会增加。但这不能阻止首次创建文档。
我试着为此写一个安全规则,我写了下面的规则,但我不完全确定我做了什么。
allow create: if request.resource.data.timestamp == request.time
&& request.auth != null
&& request.auth.uid == userId;
allow write: if request.resource.data.timestamp == request.time
&& request.resource.data.counter > resource.data.counter
&& request.auth != null
&& request.auth.uid == userId;
字符串
有人能证明这是正确的规则吗?
1条答案
按热度按时间uwopmtnx1#
我建议重新定义您的要求。您现在有:
如果文档的计数器值不高于已存储的值,我希望阻止写入该文档。
虽然这在考虑数据需求/验证时很常见,但我发现当我将其框定为“如果......,则允许编写文档"时,我在Map到规则方面更成功。在您的情况下,它读起来像:
如果文档尚不存在或计数器高于其当前值,则允许写入文档。
如果这确实是要求,它将翻译为:
字符串
您还可以使用粒度规则,将
write
拆分为单独的create
和update
操作。