我有一个用于两个用户之间通信的通道,我使用Firebase存储在这些用户之间传输文件。我不希望第三个用户有权访问该频道的文件。
我试图识别授权的用户使用'autfile'和其中的元数据。该autfile是使用admin sdk上传的。
只有特定的用户可以下载和上传文件到存储中特定的路径,其中autfile元数据包含他的uid。仍然用户不允许触摸autfile。
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存储规则,并希望获得有关如何实施的建议。
我认为你在这里不需要“用户”。
function isAllowedUser(uid) {
return /authfile.resource.metadata.users[uid] == true;
}
这应该是有效的资源.元数据[uid]==true;
此外,如果您需要检查另一个文件或元数据的存在,请考虑使用本答案中提到的云函数。