删除时如何解决“用户无权访问此对象”错误

时间:2019-04-07 10:31:51

标签: android firebase

我无法通过'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;
    }
  }
}

即使我使用的是下载网址或路径网址,图片也不会被删除。

1 个答案:

答案 0 :(得分:0)

这是因为删除项目时,请求中将没有资源项目,因此条件将失败。

您应该按照以下说明微调写作过程

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规则模拟器来测试您的规则