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

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

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

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

我的问题实际上是如何总体上实现上述内容,但涵盖以下方面

  • 问题 1 - 就用户体验方法而言,您要求/让用户在这里做什么?将其构建到应用代码中吗?
  • 问题 2 - 如何构建 Firestore 数据库来处理这个问题?即结构会是什么样子 - 也许所有数据都位于主要用户 UID 下
  • 问题 3 - 如何构建 Firestore 规则来保护它?例如您如何在这里进行“组内用户”类型检查?例子?
  • Q4 - 应用程序代码是什么样的:
    • 当主用户点击“共享”时创建用户安全组
    • 要将用户添加到组中吗?
    • 访问数据?

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

最佳答案

对于后代,这个问题已经在 google-cloud-firestore-discuss 上得到了解答。群组:https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/google-cloud-firestore-discuss/KEs4is11LXc/xs2zIvQmCQAJ

TL;博士:

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;
      }
    }
  }
}

关于firebase - 如何使用 Firestore 实现用户组类型安全(例如共享待办事项列表)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47191502/

相关文章:

android - Firebase存储的OnSuccessListener回调未调用

javascript - React 的 SetState 在 Firebase Auth 的 onAuthStateChanged 中导致 setState 未定义

javascript - 使用 React Router 将 Firebase Auth 用户发送到组件

swift - 检查每个 ViewController 的登录状态

firebase - 根据用户 oauth 电子邮件设置安全规则 firebase

ios - Swift:通过保存在 Firebase 中的 URL 显示图像

node.js - firebase.database() 不是本地 Node 上的函数

firebase - 您可以在身份验证登录时触发(firebase)云功能(但不能创建帐户)吗?

javascript - 跨快速路由访问 Firebase Admin

javascript - 当用户注销我的 Firebase 应用程序时,为什么它不也从身份验证提供商处注销(例如 Google)?