我正在使用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调用“创建”规则?