Firebase 如何限制组成员对文件的访问?

Firebase 如何限制组成员对文件的访问?,firebase,firebase-security,firebase-storage,Firebase,Firebase Security,Firebase Storage,我有一个聊天应用程序,用户可以在私人或集体聊天中发送照片。每个私人或团体聊天都有一个唯一的聊天id:/images//image.jpg 如何确保访问这些文件的安全性,以便只有聊天室成员才能查看这些文件?在Firebase数据库中我有一个节点,其结构如下:/members//member1:true 这真的有必要吗,因为链接只发布到相应的聊天中? 任何经过身份验证的用户是否可以浏览保存在Firebase存储中的文件?还是设计阻止了这一点?这是一个永恒的问题。这里讨论了一些地方(,),但是TL;D

我有一个聊天应用程序,用户可以在私人或集体聊天中发送照片。每个私人或团体聊天都有一个唯一的聊天id:
/images//image.jpg

如何确保访问这些文件的安全性,以便只有聊天室成员才能查看这些文件?在
Firebase数据库中
我有一个节点,其结构如下:
/members//member1:true

这真的有必要吗,因为链接只发布到相应的聊天中?
任何经过身份验证的用户是否可以浏览保存在
Firebase存储中的文件?还是设计阻止了这一点?

这是一个永恒的问题。这里讨论了一些地方(,),但是TL;DR is:目前,按照另一个服务的规则,无法从一个服务读取数据。对于服务,您可以执行以下两项操作之一:

  • 在自定义令牌中传递组信息
  • 在服务中的自定义元数据中传递组信息
这方面的一个例子:

// Allow reads if the group ID in your token matches the file metadata's `owner` property
// Allow writes if the group ID is in the user's custom token
match /files/{groupId}/{fileName} {
  allow read: if resource.metadata.owner == request.auth.token.groupId;
  allow write: if request.auth.token.groupId == groupId;
}

那么,如果一个用户被允许属于多个组,你会怎么做呢?那么我通常会推荐一种解决方案,比如在链接的Gist中,将所有权信息添加到每个文件,而不是用户令牌。很遗憾,链接的Gist文件不再可用。