在Firebase存储安全规则(而不是实时数据库)中,有没有其他方法可以执行检查:路径中是否存在其他对象,或存在其他对象的元数据?Firebase存储安全规则:检查另一个对象是否存在/检查对象的元数据
一些背景
目前我储存安全规则设置,使用户只具有读取访问权限,并没有写访问他们/users/{userId}/
路径。
我有一个管理云功能,将文件保存到/users/{userId}/necessary-file.pdf
。而且我不希望用户能够修改或编写此文件,只有云功能才有权执行此操作。要做到这一点,我想我可以匹配类似的文件名:
match /users/{userId}/{fileName} {
allow write: if !fileName.matches("necessary-file.pdf")
}
问题
有什么办法,我只能让用户写一些,其他-file.pdf如果他们在相同的路径上已经有necessary-file.pdf(或者甚至在其他地方,如果该效果更好)。虽然仍然禁止他们写necessary-file.pdf。
那么,有什么办法让我做这样的伪代码吗? :
match /users/{userId}/{fileName} {
allow read: if request.auth.uid == userId;
allow write: if (!fileName.matches("necessary-file.pdf")) && ("necessary-file.pdf".exists())
}
作为替代方案,我可以有我的云功能,写一个元数据必要-file.pdf并检查太多。有什么办法可以执行像这样的伪代码吗? :
allow write: if "necessary-file.pdf".metadata['canUserWrite'] == 'yesUserCan'
最后
什么是真正酷的这是,如果这是在任何远程可能的,它可以用来火力数据库,并在一个火力点存储规则之间进行通信不那么实时的方式。 (referring to this question here)云端功能可侦听实时数据库中预期字段的更改,并将文件写入Firebase存储,Firebase存储可检查该文件。
完美感!那么我会做更多的思考。非常感谢7月4日的快速回复和祝福! – johnozbay