【问题标题】:How to structure Firebase data and rules for sharing data between users?如何构建 Firebase 数据和用户之间共享数据的规则?
【发布时间】:2013-07-21 19:54:32
【问题描述】:

目前我有一个简单的待办事项应用程序,用户可以在其中创建一个列表,然后将项目勾选为已完成。数据的结构如下:'/acc_' + USER_ID +'/done' 和 '/acc_' + USER_ID +'/todo'。随着项目“完成”,它们将被移至完成列表。

我希望用户能够与另一个经过身份验证的用户共享列表。

目前的规则如下所示,似乎可行。

{
  "rules": {
        "$userPath": {
            ".read": "auth != null",
            ".write": "auth != null",
            ".validate": "$userPath === 'acc_' + auth.id"
        }
    }
}

我认为我需要做的是让每个拥有一系列已批准电子邮件地址的用户以某种方式将其与安全规则挂钩。

或者,我可以在根目录中创建一个列表,并且只有创建者和共享用户可以访问它。

有什么指导吗?

【问题讨论】:

    标签: firebase firebase-security


    【解决方案1】:

    由于用户决定了他们希望与谁共享列表,我会将该信息存储在用户数据本身中。例如:

    {
      "rules": {
        "$userPath": {
          ".write": "$userPath == 'acc_' + auth.id",
          ".read": "$userPath == 'acc_' + auth.id || root.child($userPath).child('shared').hasChild(auth.id)"
        }
      }
    }
    

    然后将共享数据的用户列表存储在acc_userid/shared/

    【讨论】:

    • 我对上述规则不太满意。尽管 'acc_' + auth.id '/shared' 是一个数组,但以下内容似乎可以工作,其中第一个条目是我想要访问的条目。尽管事后看来,这似乎不是一个很好的解决方案。我认为我对应用程序架构的问题很深。 { "rules": { "$userPath": { ".write": "$userPath == 'acc_' + auth.id || root.child($userPath).child('shared').child('0 ').val() == auth.email", ".read": "$userPath == 'acc_' + auth.id || root.child($userPath).child('shared').child(' 0').val() == auth.email" } } }
    猜你喜欢
    • 2016-04-25
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多