Firebase Firestore .set正在更新而不是创建(跳过规则)

时间:2018-06-19 06:45:24

标签: firebase google-cloud-firestore firebase-security

我正在使用Android客户端创建新文档。

Map<String, Object> city = new HashMap<>();
city.put("name", "Los Angeles");
city.put("state", "CA");
city.put("country", "USA");

db.collection("cities").document("LA")
        .set(city)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                Log.d(TAG, "DocumentSnapshot successfully written!");
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error writing document", e);
            }
        });

这是我的安全规则

service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city} {
      allow create: if (request.auth.uid != null);
      allow update: if (request.auth.uid != null) && !("country" in request.writeFields) );
    }
  }
}

从安全规则中可以看出,只有当文档不包含“country”字段时才能进行更新。创建规则很简单。

在这个例子中,我在集合中没有文档“LA”,当我测试它时,我得到PERMISSION DENIED错误。调整更新规则确认,.set()正在调用更新规则。

如何专门调用.set调用“创建”规则?

0 个答案:

没有答案