私はCloud Forestoreを使用してユーザーデータを保存しようとしています。ルールは、私はこのようなルックスを設定している:特定のユーザーのCloud Firestoreファイルにアクセスできません
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;
}
}
}
私は何を達成しようとすると、ユーザーがサブコレクションとサブ文書を含め、{}ユーザーIDでeverytingを読み取ることができるということです。さらに、ユーザーは{lists}コレクションとすべてのサブコレクションとサブ文書に書き込むことができるはずです。
私はこのようなクラウド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.
私は "テスト" -collectionとその値にアクセスすることができます。
「テスト」マッチのルールのように、すべてに書き込み/読み取りを許可するルールを使用してユーザーのレコードを作成しました。これは、より精巧なルールでデータを保護するための私の努力の前に行われました。
なぜこれが機能していないのかわかりません。ほとんどの場合、それは些細なことですが、私はほとんど盲目的な理由を見つけようとしています...
しかし、あなたのルールでは、ログインしているユーザーはすべてのユーザーデータにアクセスできます。私が適用したルールは、ユーザー固有のアクセスを確保するためにドキュメントからコピーされます。または私は間違っていますか?そして私はログインしています。 – user1086500