【发布时间】:2020-10-30 01:06:09
【问题描述】:
我正在构建一个具有组的 android 应用程序,Firebase 存储的路径以 /{groupId}/Images/ 开头,并且我使用文件元数据添加了安全规则。但是,当我尝试列出 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);
}
});
【问题讨论】:
-
请编辑您的问题以包含我们可以重现问题的最少规则和代码。 “寻求调试帮助的问题('为什么这段代码不起作用?')必须包括所需的行为、特定问题或错误和必要的最短代码 重现它在问题本身。没有明确的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example."
-
@FrankvanPuffelen 现在可以了吗?
-
谢谢。现在,您还可以显示当您违反这些规则运行它时失败的代码吗?
-
@FrankvanPuffelen 完成
标签: java android firebase-storage firebase-security