我正在使用 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
内部吗?
我的方向正确吗?
下面的代码似乎有效。 安全吗?
"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"
}
}
}
}