【问题标题】:How to structure data in Firebase created by one user but accessible to users in a group?如何在 Firebase 中构建由一个用户创建但组中的用户可以访问的数据?
【发布时间】:2017-01-17 21:03:24
【问题描述】:

所以,假设我有这样的数据:

{ 
  "events" : { 
   "s0d980983s" : 
    { creator: "bob@bob.com",
      text: "Bob says 'My name is Robert'" },
   "kjl34jl234j" : 
    { creator: "fred@fred.com",
      text: "Fred says 'My name is Fredrick'" }
  }
  "users" : { 
   "bob@bob.com" : { "paid": true },
   "fred@fred.com" : { "paid": false }
  }
}

我假设这是构建数据的正确方法。创建数据时,我使用push()方法为数据创建一个新的key,然后将数据的创建者存储在里面。

我想这样做:

  • 我可以允许一组用户中的任何人访问某些数据(当然也不允许其他人访问)。
  • 查询是“优化的”,这意味着如果我有数千条记录,我不会遍历所有数据。

更具体地说,例如,我希望lizzie@lizzie.com 能够看到s0d980983s

我对如何构建数据以及我的 Firebase 规则应该是什么样子感到困惑。

会是这样吗?

{ "events" : { 
  "s0d980983s" : 
    { creator: "bob@bob.com",
      viewers: { "bob@bob.com": true,
                 "lizzie@lizzie.com" : true },
      text: "Bob says 'My name is Robert'" },
 ...
}

我不明白如何搜索一组用户可以查看的事件。我不相信 Firebase 支持某种可以使这段代码正常工作的通配符,对吧?

var ref = firebase.database().ref( "events/*/viewers/lizzie@lizzie.com" ).on(...);

我还想引用用户表中的事件吗?我不确定我是否了解如何展平数据(非规范化)并在两个地方保留引用以支持这样的查询。我是否应该期望进行多个查询,首先检索存储在用户对象中的事件列表,然后使用它们的键逐个检索它们?但是,如何将该逻辑放入我的 firebase 规则中?

【问题讨论】:

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


【解决方案1】:
{ "events" : { 
      "s0d980983s" : 
      { creator: "bob@bob.com",
        viewers: { "[insert bobs id]": true,
                    "[insert liz id]" : true 
                 },
      text: "Bob says 'My name is Robert'" },
      ...
}

根据您建议的上述结构,如果您使用 firebase 身份验证来验证您的用户,您可以添加另一个“读取”或“写入”规则来检查该用户是否在您的“查看者”列表中.类似:

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "auth != null && 
          root.child('users').child(auth.uid).child('viewers').child(auth.uid).val() == 
          true"
      }
    }
  }
}

这应该会有所帮助。 setting firebase security rules at a location/node

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多