gpt4 book ai didi

javascript - 是否可以在 Firestore 中读取文档然后将其锁定,以便其他人无法读取?

转载 作者:行者123 更新时间:2023-11-30 14:05:42 25 4
gpt4 key购买 nike

我正在构建一个用户可以旋转命运之轮的应用程序。当他们幸运并获得特定领域时,他们可以赢得一张优惠券。

我想将这些优惠券存储在具有以下属性的 firebase Firestore 中:

{
"code" : 381939,
"expire_date" : xxx,
"value" : 5,
"currency" : "EUR"
}

我的想法是,当有人转动命运之轮时,将从数据库中随机选择一张优惠券/文件。如果没有任何优惠券,则命运之轮应该处于非事件状态。所以我想我需要放置一个按钮“检查优惠券的可用性”或类似的按钮来检查是否还有剩余的优惠券。如果有,轮子将被设置为事件。

那么有两种情况:1) 他们赢了:优惠券将分配给用户并从数据库中删除2) 他们松了:优惠券将存储回数据库中。

不幸的是,当很多用户想同时使用命运之轮时,我认为这不会很好地工作,因为多个用户可以阅读同一个文档/优惠券。

那么是否有可能“锁定”文档,以便在有人阅读后其他人无法阅读它?或者我如何确保每个用户都会从数据库中读取不同的优惠券/文档,从而没有用户共享此优惠券?

希望你能理解我的问题。

如果您需要更多信息,请告诉我。

最佳答案

您可以使用 Cloud Firestore 的服务器端安全规则限制对文件的访问。由于您谈论的是将优惠券/文档与用户相关联,因此这也是为您的安全规则建模的好方法。

例如,如果用户已领取优惠券,假设您将一个 owner 字段添加到包含用户 UID 的文档中:

{
"code" : 381939,
"expire_date" : xxx,
"value" : 5,
"currency" : "EUR"
"owner" : "uidOfOwner"
}

现在我们将确保:

  1. 用户只能阅读没有所有者的文档,如果他们是所有者。
  2. 用户只能写入还没有所有者的文档。

我们可以用这些规则来做到这一点:

match /databases/{database}/documents {
match /coupons/{coupon} {
allow read: if !resource.data.keys().hasAll(['owner']) || resource.data.owner == request.auth.uid;
allow write: if !resource.data.keys().hasAll(['owner']);
}
}

这里有几点需要注意:

  • 使用上述规则,您可以控制对单个文档的访问,但用户将无法再阅读/查询整个优惠券 集合。如果您仍想允许这样做,请查看 securing queries .
  • 使用上述规则,用户可以在没有所有者(或他们是所有者)的情况下修改他们想要的关于文档的任何内容。您可能希望进一步限制写入权限,以便用户只能写入所有者字段。在 checking if a field is modified 上查看此答案.

关于javascript - 是否可以在 Firestore 中读取文档然后将其锁定,以便其他人无法读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com