如何使用Firestore实现用户组类型安全性(例如共享待办事项列表)?

时间:2017-11-08 23:30:56

标签: firebase firebase-authentication firebase-security google-cloud-firestore

在Firestore中为移动应用程序实现安全组的最佳实践方法是什么(在本例中,react-native有效地使用“Web”接口)。举一个更具体的例子:

  • 使用移动应用程序的用户能够“共享”存储在Firestore中的数据(例如待办事项列表)[使用“Web”界面构建]
  • 目标是采用极低摩擦力的方法。理想情况下,主要用户使用“匿名”身份验证方法
  • 使用该应用程序
  • 然后,用户希望与其他人安全地“共享”数据(例如待办事项列表)

我的问题实际上是如何实现上述内容,但涵盖了诸如

等方面
  • Q1 - 就用户体验方法而言,您在这里要求/让用户做什么?将其构建到应用程序代码中?
  • Q2 - 如何构建Firestore数据库来处理此问题?即结构是什么样的 - 也许所有数据都在主要用户UID下
  • 问题3 - 您如何构建Firestore规则来保护它?例如你如何在这里进行“用户组内”类型检查?示例
  • 问题4 - 应用程序代码的外观如下:
    • 在主要用户点击“分享”时创建用户安全组
    • 将用户添加到群组?
    • 访问数据?

总体上热衷于了解安全用户的最低摩擦方法(在具有firestore“web”sdk的移动应用程序,即react-native包装器)将他的数据(例如待办事项列表)分享给他/她专门选择的其他人/以某种方式批准。

1 个答案:

答案 0 :(得分:4)

对于子孙后代,google-cloud-firestore-discuss群体已经回复了这个问题:https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/google-cloud-firestore-discuss/KEs4is11LXc/xs2zIvQmCQAJ

TL; DR:

service cloud.firestore {
  match /databases/{database}/documents {
    match /lists/{listId} {
      // step 1
      allow create: if request.resource.data.owner == request.auth.uid;
      // step 3
      allow get: if exists(/databases/$(database)/documents/lists/$(listId)/users/$(request.auth.uid));
      match /users/{userId} {
        // step 2
        allow create: if request.auth.uid == get(/databases/$(database)/documents/lists/$(listId)).data.owner;
      }
    }
  }
}