firebase Firestore安全规则|如果计数器不大于数据库中存储的字段,则禁止写入数据

syqv5f0l  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(148)

使用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;

字符串
有人能证明这是正确的规则吗?

uwopmtnx

uwopmtnx1#

我建议重新定义您的要求。您现在有:
如果文档的计数器值不高于已存储的值,我希望阻止写入该文档。
虽然这在考虑数据需求/验证时很常见,但我发现当我将其框定为“如果......,则允许编写文档"时,我在Map到规则方面更成功。在您的情况下,它读起来像:
如果文档尚不存在或计数器高于其当前值,则允许写入文档。
如果这确实是要求,它将翻译为:

allow write: if (resource == null || request.resource.data.counter > resource.data.counter)

字符串
您还可以使用粒度规则,将write拆分为单独的createupdate操作。

相关问题