【问题标题】:Firebase Security: Only users who are referenced in the object should read itFirebase 安全性:只有对象中引用的用户才能阅读它
【发布时间】:2016-03-22 12:17:39
【问题描述】:

我的 Firebase 中有对象,我想将访问权限限制为对象中引用的用户。我的 Firebase 结构如下所示:

  • 对象
    • object_info
    • 联系人
      • $contact_id
        • user_id
        • 用户角色
  • 用户
    • $user_id
      • 用户信息

object/contacts/$contact_id/user_id 对 users/$user_id 的引用

因此,每个应该具有访问权限的用户都会在 contacts 的一个子项中显示为 user_id。不幸的是,我找不到在 contacts 的所有孩子中搜索某个 user_id 的方法。 有没有办法设置这个 Firebase 安全规则,我应该更改我的整个数据库结构以保证它的安全吗?

【问题讨论】:

    标签: security firebase backend rules


    【解决方案1】:

    可以检查用户节点是否存在:

    {
      "Object": {
        ".read": "data.child('contacts').child(auth.uid).exists()"
      }
    }
    

    【讨论】:

    • 不幸的是,我不能。孩子 data.child('contacts').child(auth.uid) 永远不会存在。 auth.uid 中的用户密钥存储在比用户密钥存储更多信息的联系人中更深一层。这是因为我需要使用尚未注册的联系人,当他们注册时,我可以只更新对用户的引用,而无需更新与此联系人关联的所有内容。
    • 在这种情况下它将无法工作,您需要更改数据模型以允许您尝试实施的用例。
    • 谢谢!任何建议如何实现这一目标?问题是,如果我直接引用用户,我将不得不搜索与此对象关联的所有内容并检查联系人是否出现在某处以更新联系人的密钥。
    • 你需要有一个已知位置的密钥,这样你才能使用exists(),就像在我的sn-p中一样。因此,在您当前的方法中添加一个反向数据结构:可以访问该对象的用户列表。
    • 好的,但是还有一件事。我想显示可供一个用户使用的所有对象的列表(我的对象是对象的子对象)。但是,如果我指定我的 firebase 规则,以便每个有权访问 $object 的用户都可以读取它,我将无法再读取父 objects ,我需要在不知道对象键的情况下显示可用列表。 (我使用 Angularfire 并想使用 ng-repeat="objects in object" 显示我的对象)
    猜你喜欢
    • 2016-03-21
    • 2011-12-25
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多