gpt4 book ai didi

群组的 Firebase 存储安全规则

转载 作者:行者123 更新时间:2023-12-03 14:23:54 25 4
gpt4 key购买 nike

我知道对此有几个问题(例如 https://stackoverflow.com/a/52808572/3481904 ),但我的情况仍然没有一个好的解决方案。

我的申请有 群组 ,动态创建/删除,成员(用户)可以随时添加/删除。

每个群组有 0..N 个私有(private)文件 (Firebase 存储),保存在不同的路径中(都具有前缀 groups/{groupId}/... )。

在 Firestore 安全规则中,我使用 get() & exists()了解登录用户是否属于某个组。但我不能在 Firebase 存储安全规则中执行此操作。

两个建议的解决方案是:

  • 用户声明:

  • 但是需要刷新 token (注销/登录或更新过期 token ),这对我的用例来说是 Not Acceptable ,因为用户需要在受邀后立即访问。此外,用户可以是许多组的一部分,这些组可能会增长超过 1000 字节。
  • 文件元数据:

  • 但是组可以在不同的路径中有N个文件,所以我需要循环列出一个组的所有文件,并在每个文件的元数据中设置组成员的用户ID,允许访问它。当添加/删除成员时,这将是由 Firestore(Firebase 函数)触发的操作。

    我不喜欢这种方法,因为:
  • 需要循环列出 N 个文件并为每个文件设置元数据(性能不是很好)
  • 要添加新文件,我想我需要设置 create公开(因为还没有要检查的元数据),然后需要触发一个函数来将用户 ID 添加到元数据
  • 授予文件访问权限可能会有几秒钟的延迟,如果用户在此之前打开组页面,这可能会导致问题,体验不好

  • 所以,我的问题是:
  • 有没有更好的办法?
  • 如果我只允许客户端 getcreate所有文件在经过身份验证后(禁止 deletelist ),这对于安全性来说是否足够?我认为恶意黑客可能会使用匿名用户上传任何内容,或者如果他们知道路径,则可能会读取所有私有(private)组文件...

  • 谢谢!

    最佳答案

    如果自定义声明对您不起作用,那么实际上没有“好”的方法来实现这一点。你唯一真正的选择是:

  • 以某种方式利用 Cloud Functions 将 Firestore 中的相关数据镜像到 Storage 中,将 Firestore 文档数据放入 Storage 对象元数据中以供规则检查。
  • 通过您控制的后端(也可以是云功能)路由对存储的所有访问,该后端执行所有相关的安全检查。如果您使用 Cloud Functions,这不适用于内容大于 10MB 的文件,因为这是 Cloud Functions 请求和响应大小的限制。

  • 请向 Firebase 支持提交功能请求,以允许在存储规则中使用 Firestore 文档 - 这是一个常见请求。 https://support.google.com/firebase/contact/support

    关于群组的 Firebase 存储安全规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59092678/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com