gpt4 book ai didi

security - firebase 中 protected 内容的正确授权规则

转载 作者:行者123 更新时间:2023-12-03 10:29:38 25 4
gpt4 key购买 nike

是否有针对 Firebase 应用程序中 protected 内容的正确授权规则的最佳实践方法

  • 专门使用firepad
  • protected 内容是指用户创建文档并仅与某些其他用户共享的地方)。
  • 此外,我需要能够查询 firebase 以获取我有权访问的所有文档(我创建的文档和其他用户与我共享的文档)

  • 到目前为止,我的一些研究:

    方法一: secret 网址
  • 我需要知道 URL 才能查看/编辑文档
  • 不是真正的授权,因为任何有权访问该 URL 的登录用户都可以编辑/修改它。
  • 无法索引我有权访问的所有文档

  • 方法二:使用 firebase 授权规则将用户添加到文档中,并在读取/写入之前检查用户是否为 document.users。

    取自:
    Protected content in Firebase possible?
    {

    "documents": {

    "$documents_id": {

    // any friend can read my post

    ".read": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()",

    // any friend can edit my post
    ".write": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()"

    },

    users:{

    // List of user.ids that have access to this document

    }

    }

    }

    优点:
  • 适当的授权/认证。只有已被授予访问权限的经过身份验证的用户才能查看/编辑。

  • 缺点:
  • 无法查询允许用户编辑的所有文档(我拥有或与我共享的文档)(此假设是否正确?)

  • 方法三: Firebase 授权规则(方法 2),以及每个用户都可以访问的具有 document_id 数组的冗余用户存储。此用户存储仅用于查询用户有权访问的所有文档。
    IE:
    {
    "documents": {
    "$documents_id": {
    // any friend can read my post
    ".read": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()",
    // any friend can edit my post
    ".write": "auth.id === data.child('owner').val() || root.child('users/'+data.child.owner.val()+'/users/'+auth.id).exists()"
    }
    },
    "users":{
    "$user":{
    ".read": "auth.id=$user.id",
    ".write": "auth.id=$user.id"
    "$documents":{
    // All the documents i have access to. This list gets ammended whenever I am granted/stripped access to a document.
    }
    }
    }
    }

    优点:
  • 正确的认证/授权

  • 缺点:
  • 重复数据,必须处理两个数据存储之间的同步问题。这似乎不是一个好主意。

  • 方法四:群组

    Granting access to Firebase locations to a group of users 使用组
  • 我们为数据存储中的每个文档设置了一个组
  • 无法轻松查询用户可以访问的所有文档的 firebase

  • 有一个更好的方法吗?

    最佳答案

    您在列举选项方面做得很好,而且您绝对走在正确的轨道上。正如您所发现的,无法根据安全规则进行查询。这是有意完成的,因为(取决于您的安全规则)这可能非常昂贵(出于这个原因,Firebase 通常避免复杂的查询)。

    因此,您的方法 3 是执行此操作的正确方法。为这些类型的情况复制数据实际上是一种非常普遍的做法。见 Denormalizing Your Data is Normal有关详细介绍此内容的博客文章。

    您也可以使用重复的文档列表执行方法 1。如果您希望能够仅使用 URL(包含 secret ID)“邀请”某人访问文档,这将特别有用。或者你可以将两者结合起来(有些文件是“公开但未列出的”,有些文件是“受邀 friend 专用的”或其他任何文件。)

    关于security - firebase 中 protected 内容的正确授权规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17798243/

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