Firebase 实时数据库用户之间就某些数据进行协作的规则

问题描述 投票:0回答:1

我正在使用 Firebase 实时数据库。 我正在开发一项新功能,允许一个经过身份验证的用户向另一个经过身份验证的用户授予访问权限,以便两个用户都可以使用它。

数据的结构是

{
  "dataTables": {
    "myUserId": {
      "2-15-2023": {
        "myTableId": {
          "description": "This table was auto generated to show you a demo of the application. You can leave it, edit it or delete it.",
          "name": "Demo 1 Past",
          "rows": {
            "-NLBD8RiJeyZpnKg8iKI": {
              "lastEdit": 1676495720665,
              "name": "This is a marked text.",
              "priority": 1
            },
            "-NLBD8RjFcXNKJEWFefR": {
              "lastEdit": 1676495720665,
              "name": "This is a regular task. Tasks can be edited by pressing the gear icon at the right side of a task.",
              "priority": 2,
              "status": 1
            }
        }
    }
}

控制用户对其他表的访问权限的数据结构

{
  "sharedTables" {
    "myUserId": {
      "myTableId": {
        "data" : "data"
      }
    }
  }
}

数据库当前规则如下:

"dataTables": {
  "$ownerUid": {
    ".read": "$ownerUid === auth.uid",  
    ".write": "$ownerUid === auth.uid",
    "$tableDate": {  
      "$tableId": {  
        ".read": "$ownerUid === auth.uid || root.child('sharedTables').child($ownerUid).child($tableId).exists()",
        ".write": "$ownerUid === auth.uid"
      }
    }
  }
}

通过此规则,普通用户仍然可以访问他们的数据。

但是当我尝试访问

/dataTables/myUserId/2-15-2023/myTableId
时,我不被允许。 基本上是尝试访问我有权访问的表。

我可以从嵌套进入

$ownerUid
$tableId
内部吗?

我的方向正确吗?

firebase-realtime-database firebase-authentication firebase-security
1个回答
0
投票

下面的代码似乎有效。 安全吗?

"dataTables": {
  "$ownerUid": {
      ".read": "auth != null && (auth.uid === $ownerUid || root.child('sharedTables').child(auth.uid).child($ownerUid).exists())",
    "$tableDate": {
      "$tableId": {
        ".read": "auth != null && ($ownerUid === auth.uid || root.child('sharedTables').child(auth.uid).child($tableId).exists())",
        ".write": "$ownerUid === auth.uid"
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.