Как исправить ошибку «У пользователя нет прав доступа к этому объекту» при удалении - PullRequest
2 голосов
/ 07 апреля 2019

Я не могу удалить изображение с помощью 'getreferencefromUrl' или путем доступа к дочерним объектам хранилища, потому что я получаю сообщение об ошибке на faillistener

У пользователя нет прав доступа к этому объекту.

Я пытался починить хранилище и пытался разными способами получить доступ к файлу для удаления, но он просто не работает.

Я сейчас использую:

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-адрес пути.

1 Ответ

0 голосов
/ 07 апреля 2019

Это связано с тем, что при удалении элемента в запросе не будет элемента ресурса, поэтому условие не будет выполнено.

Вы должны либо точно настроить процесс записи следующим образом

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проверить свои правила

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...