我有一条规则可以在Firestore Rules模拟中正确执行,如下所示。
/ config / permissions文档是许多名为X153,X154,X155等的数组,其中包含UID:
当我尝试在Android中进行此访问时,会收到PERMISSION_DENIED响应。
代码:
DocumentReference docRef = db.collection("arcs").document("X153");
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());
}
}
});
模拟中使用的UID与Android中相同:
如果我设置规则直接验证UID的访问权限
如果我将config / permissions结构展平为仅键/值,例如X153 : '9iXQBaG3Ycaey4cFUj8tZjhKMaB3'
,然后将规则更改为
match /arcs/{x} {
allow read: if request.auth.uid == get(/config/permissions).data[x];
}
为什么我使用如图所示的规则收到此PERMISSION DENIED答复?