提问者:小点点

Firebase存储规则:对允许的用户进行身份验证


我有一个用于两个用户之间通信的通道,我使用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存储规则,并希望获得有关如何实施的建议。


共1个答案

匿名用户

我认为你在这里不需要“用户”。

function isAllowedUser(uid) {
    return /authfile.resource.metadata.users[uid] == true;
}

这应该是有效的资源.元数据[uid]==true;

此外,如果您需要检查另一个文件或元数据的存在,请考虑使用本答案中提到的云函数。

相关问题