数据共享应用的 Firebase 安全规则

时间:2021-01-29 06:24:49

标签: android firebase react-native

我正在开发一个具有共享功能的简单本机待办事项应用程序。我正在使用 Firebase Storage 进行存储和共享。但是,我是 Firebase 的初学者,无法理解如何继续。我的要求如下

  1. 每个用户都可以添加/删除/编辑自己的数据库条目。
  2. 用户 A 应该能够与用户 B 共享他们的一些待办事项。共享可以是 viewedit 模式(与 Google 云端硬盘文件完全一样)。
  3. 永久允许用户 B 查看任何新待办事项的所有未来 viewedit 模式的选项。基本上是允许或禁止用户 B 查看数据的选项。

我的尝试: Bullet 1 可以简单地通过

// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

source

对于第 2 点和第 3 点,我计划让所有用户都可以访问一个单独的 JSON 文件。因此,当用户 A 向用户 B 授予 edit 对其某些数据的访问权限时,用户 B 的 JSON 文件应使用 A 的 uid 进行更新。我无法为此编写安全规则,因为我不知道我们是否可以编写规则来从 JSON 文件中获取数据。此外,我认为这种方法不是很好,因为某些攻击者可能会用垃圾条目淹没用户 B 的 JSON 文件,实际上也可以删除现有条目。

如果您能帮助我们为 Firebase 存储实现这种类似 Google Drive 的共享功能,我们将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以允许谁可以在规则中写入或读取特定路径 如果您的数据库看起来像这样:- enter image description here 您的规则可能如下所示:-

     "rules": {
        "$uid":{
          "$todoid":{
            "todoitem":{
              ".read":"$uid == auth.uid || data.parent().child('sharedwith').child(auth.uid).val() === 'editor' || data.parent().child('sharedwith').child(auth.uid).val() === 'editor'",
                ".write":"$uid == auth.uid || data.parent().child('sharedwith').child(auth.uid).val() === 'editor'"
            }
          }
        }
  }

您可以关注此博文以更好地理解:- https://firebase.googleblog.com/2016/10/group-security-in-firebase-database.html

答案 1 :(得分:0)

很高兴您尝试使用 Firebase 实时数据库规则。

首先,我猜您以不同的方式理解规则的概念。 firebase 中的规则不是为了拥有用户特定的数据控制而构建的。 这些规则用于向特定类型的用户授予特定数据访问权限

例如:

您可以向仅通过身份验证的用户授予特定子级的 R/W 权限。对于未通过身份验证的我们可以限制访问

此规则选项卡的主要目的是避免来自第三方访问的数据泄露

要了解有关 Firebase 规则的更多信息,请观看给定的视频。链接

https://www.youtube.com/watch?v=PUBnlbjZFAI

您也可以查看此文档

https://firebase.google.com/docs/database/security