在安全规则中执行get()
函数不起作用。
它返回客户端上被拒绝的权限,但会通过模拟。
配置/权限布局是一个数组结构:
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());
}
}
});