gpt4 book ai didi

javascript - Firestore 安全规则 - 创建时,检查属性不在另一个文档中

转载 作者:行者123 更新时间:2023-12-03 02:01:26 24 4
gpt4 key购买 nike

我正在使用 firestore,并且拥有包含名为“域”的属性的用户:

{ 
domain: "@domain.com"
}

我目前正在使用云函数在注册时为用户生成随机域。云函数查询数据库是为了检查随机域是否已存在,这会导致几秒钟的延迟。

我的问题是,如果 Firestore 安全规则中该域已存在另一个用户,是否有办法阻止插入新用户,而无需查询整个数据库?

到目前为止,我已尝试将其添加到我的安全规则中,但它允许重复:

match /databases/{database}/documents {
match /users/{Id} {
allow read: if true;
allow create: if get(/databases/$(database)/documents/users/$(Id)).data.domain != request.resource.data.domain;
}
}

知道仅使用安全规则这是否可行吗?

最佳答案

您无法检查集合中的任何其他文档中是否已存在集合。如果你想一想,这是有道理的 - 这样的操作成本会非常高。

可以做的是检查集合中是否已存在具有特定 ID 的文档。因此,针对您的问题类型的典型解决方案是创建一个集合,在其中使用域作为 ID。

例如

users
user1: { domain: "@domain.com" }
user2: { domain: "@other.com" }
domains
"domain.com": "user1"
"other.com": "user2"

现在,您的安全规则可以检查该域是否已在 /domains 集合中被声明。

请注意,您需要使用 batched write执行更新,因为在此方法中 /users/domains 必须始终保持同步。

关于javascript - Firestore 安全规则 - 创建时,检查属性不在另一个文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50003056/

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