Я создаю приложение android, в котором есть группы, а в хранилище Firebase есть пути, начинающиеся с / {groupId} / Images /, и я добавил правила безопасности с использованием метаданных файлов. Но правила не работают, когда я пытаюсь перечислить содержимое папки изображений, потому что для папки нет метаданных. Как решить эту проблему?
Есть ли способ получить доступ к произвольному изображению из папки «Изображения» в правилах безопасности и предоставить разрешение, просмотрев его метаданные. Кроме того, я не могу использовать специальные токены, потому что groupId не известен во время регистрации. В настоящее время написаны следующие правила безопасности:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{groupId}/Images/{allPaths=**} {
allow read: if request.auth.uid in resource.metadata.keys() && groupId in resource.metadata.keys();
allow write: if request.auth.uid in request.resource.metadata.keys() && groupId in request.resource.metadata.keys();
}
}
}
Код, в котором эти правила не работают:
storageReference = FirebaseStorage.getInstance().getReference();
StorageReference listRef = storageReference.child(groupId).child("Images");
listRef.listAll().addOnSuccessListener(new OnSuccessListener<ListResult>() {
@Override
public void onSuccess(ListResult listResult) {
for (StorageReference prefix : listResult.getPrefixes()) {
Log.d(TAG, "Storage reference prefix is: "+prefix);
}
for (StorageReference item : listResult.getItems()) {
Log.d(TAG, "Storage reference item is: "+item);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "listRef on storage failed: ",e);
}
});