【问题标题】:Firebase - Allow user access to parts of database based on database informationFirebase - 允许用户根据数据库信息访问部分数据库
【发布时间】:2018-12-22 03:18:59
【问题描述】:

我知道如何让用户使用他的 UID 对数据库的某些部分进行读/写访问,但我想做一些有点但更复杂的事情,我不知道该怎么做。如果我有这样的数据库结构:

  • 用户:

    • oixMNpuyaaTTntNVl17MC74wL8e2:

      • 访问:
        • 某个名称:“某个值”
        • 其他名称:“其他值”
  • 东西
    • 一些名字
      • 信息:“更多信息”
      • InformationMore: '更多信息'

在这种情况下,我需要用户oixMNpuyaaTTntNVl17MC74wL8e2 才能访问Some Name 下的所有数据,这些数据是在数据库的其他位置指定的。我希望我能够正确解释我的问题,这是可能的!此外,不能将StuffSome Name 子级设置为oixMNpuyaaTTntNVl17MC74wL8e2,因为其他用户可能也可以访问Some Name

注意:我也在使用 Firebase Web 和 Admin,使用 Python (Flask) 和 JavaScript。

【问题讨论】:

    标签: javascript firebase firebase-realtime-database firebase-security


    【解决方案1】:

    我在理解您的问题时遇到了一些麻烦,如果这不是您要查找的内容,请编辑您的问题并更深入地解释您要查找的内容。

    如果您希望仅允许在“用户”表下获得该访问权限的用户访问“某个名称”,那么您可以编写一个规则来查找该用户下的“某个名称”权限。此规则将适用于您应用的所有用户,因此任何获得访问权限的用户都可以访问该数据。

    您的规则如下所示:

    {
      "rules": {
    
        "Stuff": {
          "$someName": {
            ".read": "root.child('Users').child(auth.uid).child('accesTo').val() == $someName"
          }
        },
    
        // ...etc... other rules for other tables in your database
    
    }
    

    这种事情还有很多例子in the documentation

    【讨论】:

    • 这看起来很到位。很好的答案杰里米!
    • 我真的很抱歉 - 我在我的数据库结构中犯了一个小错误 - 用户实际上有多个他可以访问的东西,它们都是关键名称,所以我需要检查如果任何一个键名匹配。我该怎么做?
    • 然后您可以使用.hasChild() 来查看该用户是否列出了它:".read": "root.child('Users').child(auth.uid).child('accesTo').hasChild($someName)
    • 哇,非常感谢!有用!你也可以编辑你的答案吗?因为我编辑了问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2017-10-29
    • 2018-03-31
    • 2021-06-24
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多