我正在建立一个网络平台,用户可以上传照片和视频,我使用firebase存储,但我来了一个交叉的问题,我不能解决。
我想在公开之前手动检查所有文件。
因此,我的第一个想法是创建一个单独的文件夹,当管理员帐户批准文件时,他可以将其从/private/img. jpg移动到/public/img. jpg。但由于某些原因,firebase存储没有移动文件的功能。
所以我有了一个新的想法,使用服装元数据,阻止读取没有设置为“公开”的元数据可见性的图像。但对我来说,这个解决方案似乎不是最好的...更多的是,你不能阻止列表文件与特定的元数据,所以即使文件是私人的,每个人都可以看到文件的存在,和名称,这是我的保护风险。
那么,有没有人,谁可以帮助找到新的解决方案?
谢谢你,谢谢!
1条答案
按热度按时间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
。安全性规则将沿着以下思路(未经测试):
不要忘记为Firestore集合声明正确的安全规则,这样只有管理员用户才能批准文件。