Я не могу удалить изображение с помощью «getreferencefromUrl» или путем доступа к дочерним элементам хранилища, потому что я получаю сообщение об ошибке при отказе.
User does not have permission to access this object.
Я пытался исправить хранилище и пробовал разные методы доступа к файлу для удаления, но он просто не работает.
В настоящее время я использую:
StorageReference photoRef = mFirebaseStorage.getReferenceFromUrl(mImageUrl);
photoRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "onSuccess: deleted file");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: did not delete file: " e.getmessage());
}
});
Мои правила хранения выглядят так:
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null && request.resource.size < 500 * 1024;
}
}
}
Изображение не удаляется, даже если я использую URL-адрес загрузки или URL-адрес пути.
Это связано с тем, что при удалении элемента в запросе не будет элемента ресурса, поэтому это условие не будет выполнено.
Вы должны либо точно настроить процесс написания следующим образом
match /{allPaths=**} {
allow write: if request.auth != null && request.resource.size < 500 * 1024;
allow delete: if request.auth != null;
allow read: if request.auth != null && request.resource.size < 500 * 1024;
}
или вы можете сделать это в одной строке, используя
match /{allPaths=**} {
allow write,read: if request.auth.uid != null &&
(request.resource.size < 500 * 1024 || request.method == 'delete');
}
Кроме того, вы должны использовать симулятор правил Firebase для проверки ваших правил.