【问题标题】:How to programmatically modify security rules in Firebase?如何以编程方式修改 Firebase 中的安全规则?
【发布时间】:2013-12-15 03:18:21
【问题描述】:

firebase 文档中的示例假定手动更新 firebase 安全规则。如何以编程方式修改安全规则以支持现实世界的协作应用程序?在我正在考虑的用例中,要求用户能够邀请其他用户协作/共享选定的数据,并能够授予/撤销对协作者的访问权限。如何使用 firebase 实现这一点?

【问题讨论】:

    标签: security firebase firebase-security


    【解决方案1】:

    您实际上不应该以编程方式更改您的安全规则。您应该将它们视为代码,并且仅在部署时更改它们。

    如果您尝试更改用户实际允许执行的操作,则应通过编写依赖于 Firebase 中数据的安全规则来实现。

    例如,假设您希望将访问某条数据的权限仅限于特定组中的用户。无需每次更改组成员身份时都修改安全规则,您只需将组存储在 Firebase 中并让您的安全规则检查当前用户是否在该组中,然后再允许访问。

    ".read" : "root.child('groups').child($groupID).child(auth.userid).exists()"
    

    这样,只要群组成员资格发生变化,用户就会自动被授予访问他们应该被允许查看的数据的权限。

    有关更复杂的安全规则示例,请查看 Firefeed 中的 rules.json 文件。

    【讨论】:

    • 感谢您的快速回答。使用组来处理动态更新的用户是有意义的。但是如何处理动态添加的数据集呢?例如,用户可以在 /users/userid/projects/projectid 下创建一个项目,然后希望将对该特定项目的读取权限授予一组协作者。 Firebase 将如何实现这一目标?
    • 组设置只是一个例子。你不需要有组——你可以有它取决于你喜欢的任何数据。例如,数据集本身可能有一个“可读”标志,如果设置为 true,任何人都可以读取它。或者,它可以有一个允许使用它的用户的“可读”列表。等等……
    • @AndrewLee,我有一个更复杂的案例:我正在动态创建房间(分支),我想将每个房间限制为只有 X 个特定的协作者,阻止其他人在那里写信。如何在创建房间时指定这些访问权限?请注意,可能有数百万个不同的房间。
    • 这太棒了,我没有在他们的文档中找到这个。非常感谢:)
    【解决方案2】:

    但是如何处理动态添加的数据集呢?

    您可以通过使用子 $ 节点来完成此操作。它看起来像这样:

    这是我的数据库

    users
    - userIDHere
      - name: John Doe
      - whatever: who knows
    

    您可以通过这样做为每个用户设置规则:

    {
      "rules": {
        "users": {
          "$user": {
            // whatever rules you want here, and you can reference $user to get the user's id.
          }
        }
      }
    }
    

    希望这是您的要求,希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 2016-06-27
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 2023-03-29
      • 2016-10-31
      相关资源
      最近更新 更多