在 Firebase 中设置子项的最大数量

J. *_*Doe 1 ios firebase firebase-security swift firebase-realtime-database

关于此还有一些其他(较旧的)问题,但由于它们已经有几年历史了,我很好奇是否有关于此的更新。我想制作一个彩票动画,用户可以在其中购买彩票。一切都很顺利,但我想确保售出的门票永远不会超过一千张。它必须是服务器端,这是我的规则:

  "Lottery": {
    ".read": "auth != null",
    ".write": "auth != null",
      "counter": {
        ".validate": "newData.isNumber() && newData.val() > 0 && newData.val() <= 1000 && ((!data.exists() && newData.val() === 1) || (newData.val() === data.val()+1))"
      },
        "tickets":{
          "root.child('Lottery/counter/').val() === someValueYouNeedItToEqual"
        }
  }
Run Code Online (Sandbox Code Playgroud)

我不知道在 someValueYouNeedItToEqual 上写什么。我担心这个系统的工作。我的目标是将用户的 UID 写入服务器,如果该值(我可以在客户端搜索可用点,该值可以是 0 到 1000 之间的 Int)是免费的,则被接受。当所有的点都被取走(一个节点中有 1000 个孩子)时,它应该被拒绝。我希望有人可以帮助我找出所需的验证规则。谢谢你。

Dou*_*son 5

这里已经有关于 SO 的指南:限制可以写入路径的记录数(参考安全规则中的其他路径)

或者您可以使用Cloud Functions for Firebase来实现一个数据库触发器

  1. 随着孩子的来来去去,递增/递减一个孩子的计数(在交易中是安全的)。
  2. 检查子项计数以确保新子项可用于添加,如果无效则删除它(或其他子项)。