我有一个节点“purchasetokens”-“$userId”-““$purchaseToken””和一个仅由我的云函数设置的键“valid:True/False”。如何设置规则以确保所有具有“valid:True”键的“$userId”中不存在“$purchaseToken”?
"purchasetokens": {
".read": false,
"$userId": {
"$purchaseToken": {
".write": "auth !== null && <<!data.exists() with "valid:True" key across all $userId nodes>>",
"valid": { # this key can only be modified from the cloud function
".write": false,
},
尝试以下也许这就是你想要的正确...
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /purchasetokens/{userId}/{document=**} {
allow create: if !exists(/databases/$(database)/documents/purchasetokens/$(userId)/$(request.resource.data.purchaseToken)) || !exists(/databases/$(database)/documents/purchasetokens/$(userId)/$(request.resource.data.purchaseToken)).data.valid;
}
}
}
上述确保 Firestore 实时数据库中所有具有“valid:True”键的 $userId 中不存在 $purchaseToken,您可以设置安全规则。如果任何 $userId 已存在具有相同 $purchaseToken 和“valid:True”密钥的文档,则安全规则将阻止创建新文档。