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

时间:2021-06-29 04:57:35

标签: firebase firebase-storage firebase-security

我有两个用户之间的通信渠道,我使用 Firebase 存储在这些用户之间传输文件。 我不希望第三个用户访问频道的文件。

我正在尝试使用“authfile”和其中的元数据来识别授权用户。 该 authfile 是使用 admin sdk 上传的。

只有特定用户可以将文件下载和上传到存储中的特定路径,其中 authfiles 元数据包含他的 uid。仍然不允许用户触摸 authfile。

authfile 中的元数据如下所示:

metadata: {
  AvnYaUFdaJh1j0FMIiKWoIC2MDw1: true, // firebase userId 1
  YhFyYRbutlf1PFI4NLKTN4qWRhQ2: true, // firebase userId 2
}

my storage

我尝试过的规则:

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 个答案:

答案 0 :(得分:0)

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

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

这应该是有效的 resource.metadata[uid] == true;

此外,如果您需要检查其他文件是否存在或其元数据,请考虑使用本 answer 中提到的 Cloud 函数。