我有两个用户之间的通信渠道,我使用 Firebase 存储在这些用户之间传输文件。 我不希望第三个用户访问频道的文件。
我正在尝试使用“authfile”和其中的元数据来识别授权用户。 该 authfile 是使用 admin sdk 上传的。
只有特定用户可以将文件下载和上传到存储中的特定路径,其中 authfiles 元数据包含他的 uid。仍然不允许用户触摸 authfile。
authfile 中的元数据如下所示:
metadata: {
AvnYaUFdaJh1j0FMIiKWoIC2MDw1: true, // firebase userId 1
YhFyYRbutlf1PFI4NLKTN4qWRhQ2: true, // firebase userId 2
}
我尝试过的规则:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
// Channel Media
match /media/{channelId}/{allPaths=**} {
function isAllowedUser(uid) {
return /authfile.resource.metadata.users[uid] == true;
}
allow delete: if isAllowedUser(request.auth.uid)
&& request.resource.contentType != 'authfile'
allow read: if isAllowedUser(request.auth.uid)
&& request.resource.contentType != 'authfile'
allow write: if isAllowedUser(request.auth.uid)
&& request.resource.contentType != 'authfile'
&& request.resource.size < 16 * 1024 * 1024;
}
}
}
我是第一次编写 Firebase 存储规则,想就如何实现这一点寻求建议。
答案 0 :(得分:0)
我认为这里不需要“用户”。
function isAllowedUser(uid) {
return /authfile.resource.metadata.users[uid] == true;
}
这应该是有效的
resource.metadata[uid] == true;
此外,如果您需要检查其他文件是否存在或其元数据,请考虑使用本 answer 中提到的 Cloud 函数。