我正在尝试使用Cloud Forestore来保存用户数据。我设置的规则如下:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userID} {
allow read: if request.auth.uid == userID;
match /{lists} {
allow write: if request.auth.uid == userID;
}
}
match /users/test {
allow read, write: if true;
}
}
}
我尝试完成的是用户应该能够读取{userID}中的所有内容,包括子集和子文档。此外,用户应该能够写入{lists}集合以及每个子集合和子文档。
我像这样访问Cloud Firestore:
db.collection("users").document(mAuth.getUid()).collection("lists").document(String.valueOf(document.getDocId()))
.set(cloudListInfo)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
error = 0;
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
error = -3;
globalVars.logException(TAG, "docInfo:ExportToCloud FAILURE", e);
}
});
}
我得到的错误是:
FAILURE:Exception.string:com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: Missing or insufficient permissions.
我可以访问“test”-collection及其值。
我已经为我的用户创建了一条记录,使用允许写入/读取所有内容的规则,以及“test”-match中的规则。这是在我努力通过更复杂的规则保护数据之前完成的。
我无法理解为什么这不起作用。很可能这是微不足道的,但我几乎失明了试图找到原因......
答案 0 :(得分:0)
看起来更像是你的安全规则有问题。
试试这个:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userID} {
allow read: if request.auth != null;
match /{lists} {
allow write: if request.auth != null;
}
}
match /users/test {
allow read, write: if true;
}
}
}
此外,请不要忘记您必须登录才能发生错误。