Firebase实时数据库安全规则保护用户数据

时间:2019-09-13 08:37:05

标签: firebase firebase-realtime-database firebase-authentication

我正在研究一个我想在Firebase实时数据库上运行的项目。我使用以下格式创建了数据库设置:

   {
  "Horses" : {
    "description" : "",
    "id" : "",
    "name" : "",
    "uid" : "testx"
  },
  "images" : {
    "full_path" : "",
    "horse_id" : "",
    "id" : "",
    "thumbnail_path" : "",
    "uid" : ""
  },
  "videos" : {
    "full_path" : "",
    "horse_id" : "",
    "id" : "",
    "thumbnail_path" : "",
    "type" : "",
    "uid" : ""
  }
}

我的安全规则如下:

    {

  "rules": {
    "Horses":{
      ".read": true,
        ".write": false,

        "$uid":{
            ".read": true,
                ".write": "$uid == auth.uid"
        }

    },
    "videos":{
      ".read": true,
        ".write": false,

        "$uid":{
            ".read": true,
                ".write": "$uid == auth.uid"
        }

    },
    "images":{
      ".read": true,

        "$uid":{
            ".read": true,
                ".write": "$uid == auth.uid"
        }

    },
  }

}

我试图归档,每个人都可以阅读“马”,“图像”和“视频”中的详细信息,但是只有经过身份验证的用户才能将条目添加到“马”,“图像”和“视频”中自己(由firebase auth提供的userid检查)。

我的第一个问题是:我应该将“图像”和“视频”作为“马”的子对象包括在内吗?如果我可以一次为Horse编写一个读写规则,并且将其级联到其他规则,那会更好。

我的第二个问题是:即使身份验证设置为与我写入的数据相同的uid,im也无法将集写入到Horse或Image。例如,似乎我必须将请求发送到horses/[UID-HERE]。我如何编写规则来归档描述的行为? enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

首先:在Horses中嵌套视频和图像取决于您的使用情况。当它们具有相关性时,可以嵌套这些值,例如:

社交网站上的帖子将具有以下结构:

siteData:{
postid:{
   postTitle: value,
   videos : {
    "full_path" : "",
    "horse_id" : "",
    "id" : "",
    "thumbnail_path" : "",
    "type" : "",
    "uid" : ""
  },
    "images" : {
    "full_path" : "",
    "horse_id" : "",
    "id" : "",
    "thumbnail_path" : "",
    "uid" : ""
  }
}
}

这里我们嵌套了它们,因为它们与帖子直接相关。

另一种情况是,当我们只想将所有图像和视频存储在网站上时,结构将是:

  siteData:{
  "images" : {
    "full_path" : "",
    "horse_id" : "",
    "id" : "",
    "thumbnail_path" : "",
    "uid" : ""
  },
  "videos" : {
    "full_path" : "",
    "horse_id" : "",
    "id" : "",
    "thumbnail_path" : "",
    "uid" : ""
  },
  posts:{
  somePostId:{}
  }
  }

在这里您看到视频和图像没有嵌套在帖子中。

第二:

检查userId:

"images":{
  ".read": true,
  "$uid": {
      ".read": true,
      ".write": "auth.uid == $uid"
       }
    }

基本上,data是指规则所引用的那个数据。

您可能想检查一下:https://gist.github.com/codediodeio/6dbce1305b9556c2136492522e2100f6