joh*_*bay 0 firebase firebase-security firebase-storage
在Firebase存储安全规则(非实时数据库)中,有没有办法检查路径中是否存在另一个对象,还是存在另一个对象的元数据?
一些背景
目前我的存储安全规则已设置,以便用户只具有读访问权限,而不能对其/users/{userId}/路径进行写访问.
我有一个管理云功能,可以保存文件/users/{userId}/necessary-file.pdf.我不希望用户能够修改或编写此文件,只希望云功能有权使用.为了实现这一点,我想我可以匹配文件名,如:
match /users/{userId}/{fileName} {
allow write: if !fileName.matches("necessary-file.pdf")
}
Run Code Online (Sandbox Code Playgroud)
题
有没有办法让我只允许用户编写some-other-file.pdf,如果他们已经在同一路径上有一个必要的file.pdf(如果更好的话,甚至可以在其他地方).同时仍然不允许他们写必要的文件.pdf.
那么有什么方法可以让我做这样的伪代码吗?:
match /users/{userId}/{fileName} {
allow read: if request.auth.uid == userId;
allow write: if (!fileName.matches("necessary-file.pdf")) && ("necessary-file.pdf".exists())
}
Run Code Online (Sandbox Code Playgroud)
作为替代方案,我可以让我的云函数将一个元数据写入必要的文件.pdf并检查它.有什么方法可以执行像这样的伪代码吗?:
allow write: if "necessary-file.pdf".metadata['canUserWrite'] == 'yesUserCan'
Run Code Online (Sandbox Code Playgroud)
最后
真正酷的是,如果这可以以任何方式远程实现,它可以用于以不那么实时的方式在firebase数据库和firebase存储规则之间进行通信.(这里提到这个问题)云功能可以监听实时数据库中预期字段的变化,并将文件写入firebase存储,firebase存储可以检查.
Firebase的云存储安全规则只能访问有关当前请求和文件的信息.他们无法访问完整的存储系统,因此无法检查是否存在其他文件.
这样做的原因是在内存中为每个请求评估规则.为其他对象提供对云存储的访问会降低性能,使系统不可扩展.同样的原因解释了为什么您无法从安全规则访问Firebase数据库.
如果你想要这样的控制,你会想要查看Cloud Functions for Firebase.如果您的用户将他们的文件上传到"临时"区域,您可以让云功能验证他们是否满足所有先决条件,然后将文件移动到实际位置(使其可用于进一步处理或供客户查看) .
| 归档时间: |
|
| 查看次数: |
615 次 |
| 最近记录: |