我使用的是Firebase,并为users
提供了以下架构:
{
"uid": "randomUID",
"domain": "@domain1"
}
我有一个集合domains
,其中包含所有用户域名,如下所示:
{
"@domain1": {
"uid": "randomUID"
}
}
我尝试使用Firestore安全规则,以防止创建与pr-existing具有相同域的新用户。这就是我到目前为止所做的:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{Id} {
allow read: if true;
allow create: if exists(/databases/$(database)/documents/domains/$(resource.data.domain)) == false;
}
}
但它不起作用。我还尝试了以下允许创建规则的组合,但没有一个工作:
if !exists(/databases/$(database)/documents/domains/$(resource.data.domain));
和
if !exists(/databases/$(database)/documents/domains/$(request.resource.data.domain));
有任何想法或建议吗?调试安全规则很棘手,因为还没有调试器。
答案 0 :(得分:0)
首先,您必须先访问resource
,然后才能访问request
。然后,当您使用
if !exists(/databases/$(database)/documents/domains/$(request.resource.data.domain));
您尝试查找要创建的用户的域。到目前为止,它可能会起作用。但是您确定request.resource.data.domain
的值绝对等于您创建的domain
的路径吗?
因为如果您使用add(...)
方法添加新域,则这些值将不相同。