FieldValue.increment 的 Firestore 安全规则

Waj*_*ath 3 firebase firebase-security google-cloud-firestore

我在 firestore 有一个柜台,可以计算点赞数。我像这样增加它:

const db = firebase.firestore();
const increment = firebase.firestore.FieldValue.increment(1);

// Document reference
const doc = db.collection('coll').doc('doc');

// Update read count
doc.update({ likes: increment });
Run Code Online (Sandbox Code Playgroud)

因此,如果有人编辑源并替换incrementdecrement,它将以这种方式工作。我想阻止这种情况。

如何为此编写firestore-security规则,以便该规则只允许增加而不是减少?

l1b*_*rty 10

如果你想强制递增 1:

allow update: if request.resource.data.likes == resource.data.likes + 1;
Run Code Online (Sandbox Code Playgroud)

  • 如果多个用户同时增加同一个资源字段,这将无法很好地发挥作用。 (2认同)
  • 它将按照指定的方式工作:每次更新都必须将“喜欢”字段增加 1 (2认同)
  • @ChristopherHaas 如果您需要更频繁的更新,请检查此:https://firebase.google.com/docs/firestore/solutions/counters (2认同)

Ren*_*nec 6

您可以使用如下安全规则确保新值大于先前值:

allow update: if request.resource.data.likes > resource.data.likes;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,请注意FieldValue没有decrement()方法。如果要递减,则需要使用负数:

const decrement = firebase.firestore.FieldValue.increment(-1);
Run Code Online (Sandbox Code Playgroud)