安全规则“ get()”不适用于应用程序

时间:2018-06-27 18:42:30

标签: android google-cloud-firestore

在安全规则中执行get()函数不起作用。

它返回客户端上被拒绝的权限,但会通过模拟。

enter image description here

配置/权限布局是一个数组结构:

config / permissions->

---------------------------> CollectionName1:

-------------------------------------------------- -----> 0:UID1

-------------------------------------------------- -----> 1:UID2

---------------------------> CollectionName2:

-------------------------------------------------- -----> 0:UID3

-------------------------------------------------- -----> 1:UID4

我还尝试在配置/权限中使用单个键/值字段

config / permissions->

---------------------------> CollectionName1:UID1

---------------------------> CollectionName2:UID3

遵守规则

allow read: if request.auth.uid == get(/config/permissions).data[c]并通过模拟,但在应用程序上失败。如果我用硬编码而不是request.auth.uid来编码UID,则会得到相同的结果。

UID在应用程序上绝对正确。使用以下规则对其进行了测试,并在模拟和应用程序中传递了该规则。

allow read: if request.auth.uid == 'USER_ID_HERE'

,然后将UID的logcat输出与上面的输出进行比较。

请帮助。这是尝试找到合适的方法来构造和查询Firestore的第九天。我确定这是get()通话还是我编写通话方式的问题。

Android代码:

 FirebaseFirestore db = FirebaseFirestore.getInstance();
    FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
            .setTimestampsInSnapshotsEnabled(true)
            .build();
    db.setFirestoreSettings(settings);

    Log.d("UID", FirebaseAuth.getInstance().getCurrentUser().getUid());

    DocumentReference docRef = db.collection(collection).document("X153@111");
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    Log.d("FIREBASE", "DocumentSnapshot data: " + document.getData());
                } else {
                    Log.d("FIREBASE", "No such document");
                }
            } else {
                Log.d("FIREBASE", "get failed with ", task.getException());
            }
        }
    });

0 个答案:

没有答案