代码之家  ›  专栏  ›  技术社区  ›  Blue

Firestore安全规则与更新规则冲突

  •  1
  • Blue  · 技术社区  · 6 年前

    昨天我发布了一个关于这个的问题,但我正在创建一个新的更详细的问题。 Firestore .setData is blocked by update rule not create

    我已经运行了模拟器,规则在那里运行。当我创建文档并更改 setData 在swift代码中 update 代码有效。它似乎只在创建文档时失败。但问题是当我移除 更新 或者干脆改成 allow update: if false; setData(或被视为由规则创建)正确执行。我不知道发生了什么,也不知道有什么工具可以让我有更好的洞察力。

     match /users_real/{userID} {
        allow create: if true;
        allow read: if isOwner(userID);
        allow update: if (request.writeFields.size() == 1);
    

    }

    设置数据:

    self.docRef.collection("users_real").document("adfadsf").setData(post) { (error) in
    
                if let error = error {
                    print("He dead!: \(error.localizedDescription)")
    
    
                }
                else {
                    print("it worked, for now")
    
    
                }
            }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Bob Snyder    6 年前

    Firebase支持确认存在与评估 request.writeFields.size() . 没有估计它什么时候能修好。

    bug的存在可以通过以下规则来证明:

    service cloud.firestore {
      match /databases/{database}/documents {
    
        match /cities/{city} {
          // This should always evaluate to true, but does not.
          allow create: if (request.writeFields.size() == 1) || (request.writeFields.size() != 1);
          allow update: if true;
        }
      }
    }
    

    虽然 create 规则的计算结果应始终为true,创建城市的尝试失败,权限被拒绝。看来 request.writeFields 不仅影响它出现的规则,还影响路径的其他规则。对于上面显示的规则,试图更新现有城市也会在拒绝权限时失败。

    推荐文章