我知道与此有关的几个问题(例如https://stackoverflow.com/a/52808572/3481904),但我仍然没有很好的解决方案。
我的应用程序具有组,它们是动态创建/删除的,并且成员(用户)可以随时添加/删除。
每个组具有0..N个私有文件(Firebase存储),保存在不同的路径中(均具有前缀groups/{groupId}/...
)。
在Firestore安全规则中,我使用get()
和exists()
来了解登录用户是否是组的一部分。但是我无法在Firebase存储安全规则中执行此操作。
提出的2个解决方案是:
,但是令牌需要刷新(注销/签入或更新过期的令牌),这在我的用例中是不可接受的,因为用户一旦被邀请就需要立即访问。此外,用户可以是许多组的一部分,这些组可能会超过1000个字节。
但是组可以在不同路径中包含N个文件,因此我将需要循环列出组中的所有文件,并在每个文件的元数据中设置组成员的userIds,以允许对其进行访问。添加/删除成员时,这将是由Firestore(Firebase功能)触发的操作。
我不喜欢这种方法,因为:
create
设置为public(因为尚无要检查的元数据),然后需要触发一个Function将userIds添加到元数据所以,我的问题是:
get
和create
所有文件(不允许delete
和list
),那么这足以保证安全性吗?我认为,恶意黑客可能会向匿名用户上传任何内容,或者如果他们知道路径,则可能读取所有私有组文件... 谢谢!
答案 0 :(得分:1)
如果自定义声明对您不起作用,则实际上没有实现这一目标的“好”方法。您唯一的实际选择是:
请提交具有Firebase支持的功能请求,以允许在存储规则中使用Firestore文档-这是常见的请求。 https://support.google.com/firebase/contact/support