无法访问特定用户的Cloud Firestore文件

时间:2017-11-04 13:06:44

标签: android google-cloud-firestore

我正在尝试使用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中的规则。这是在我努力通过更复杂的规则保护数据之前完成的。

我无法理解为什么这不起作用。很可能这是微不足道的,但我几乎失明了试图找到原因......

1 个答案:

答案 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;
        }
    }
}

此外,请不要忘记您必须登录才能发生错误。