firebase 在公开之前,进行文件检查

busg9geu  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(124)

我正在建立一个网络平台,用户可以上传照片和视频,我使用firebase存储,但我来了一个交叉的问题,我不能解决。
我想在公开之前手动检查所有文件。
因此,我的第一个想法是创建一个单独的文件夹,当管理员帐户批准文件时,他可以将其从/private/img. jpg移动到/public/img. jpg。但由于某些原因,firebase存储没有移动文件的功能。
所以我有了一个新的想法,使用服装元数据,阻止读取没有设置为“公开”的元数据可见性的图像。但对我来说,这个解决方案似乎不是最好的...更多的是,你不能阻止列表文件与特定的元数据,所以即使文件是私人的,每个人都可以看到文件的存在,和名称,这是我的保护风险。
那么,有没有人,谁可以帮助找到新的解决方案?
谢谢你,谢谢!

n3schb8v

n3schb8v1#

方法1:

您可以使用从应用程序调用的Callable Cloud Function,它:
1.检查调用的用户是否具有Admin角色(使用特定的Custom Claim);
1.如果用户具有正确的角色,则通过使用Google Cloud Storage Node.js SDK(将在云功能中使用的SDK)中的copy()方法,将文件从private“文件夹”复制到public文件夹(顺便说一句,请参阅文件夹中的answer)。

方法2:

另一种完全不同的方法是利用新的云存储安全规则功能,该功能允许“building flexible permissions to protect access to storage files based on data within Firestore“。
使用此功能,您可以通过Firestore中的文档管理对文件的访问。对于云存储中的每个文件,在Firestore中创建一个与文件同名的文档,并包含一个名为(例如)published的布尔字段。默认情况下,它是false,如果管理员批准了文件,您可以将其更改为true
安全性规则将沿着以下思路(未经测试):

service firebase.storage {
  match /b/{bucket}/o {
    match /.../{fileId} {
      allow read: if 
        firestore.get(/databases/(default)/documents/files/$(fileId)).published
    }
  }
}

不要忘记为Firestore集合声明正确的安全规则,这样只有管理员用户才能批准文件。

相关问题