我正在研究一个我想在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]
。我如何编写规则来归档描述的行为?
感谢您的帮助!
答案 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