Firebase 实时数据库规则检查所有节点中是否存在具有特定键的节点

问题描述 投票:0回答:1

我有一个节点“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,
                    }, 
firebase firebase-realtime-database firebase-security
1个回答
0
投票

尝试以下也许这就是你想要的正确...

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”密钥的文档,则安全规则将阻止创建新文档。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.