我遇到了一些围绕数据库规则的问题,文档没有帮助。我正在尝试设置,以便只有用户可以删除自己的项目,但此刻我得到permission_denied错误。我假设这是因为我没有'items'级别的读/写规则。但是我觉得如果我只是添加了一个'auth!= null'规则,它会给予很多许可。有什么想法吗?
数据库设置:
users:
{
user_1 {
items:
{
item_1: true,
item_2: true,
}
},
user_2 {...},
etc {...},
},
items:
{
item_1
{
user: "user_1"
....
},
item_2
{
user: "user_1"
....
},
}
数据库规则类似于
{
"rules": {
"users": {
"$uid":{
".read": "auth != null && auth.uid==$uid",
".write": "auth != null && auth.uid==$uid"
}
},
"items": {
"$itemID": {
".read": "root.child('Users/'+auth.uid+'/'+$itemID).exists()",
".write": "root.child('Users/'+auth.uid+'/'+$itemID).exists()"
}
}
}
}
答案 0 :(得分:2)
目前任何用户都可以删除任何项目。
要确保只有所有者可以删除该项目,您不仅需要验证:
"items": {
"$itemID": {
".read": "auth.uid == data.child('user').val()",
".write": "auth.uid == data.child('user').val()"
}
}
据我所知,没有必要检查它们是否存在于/users
节点中,尽管如果需要,您可以轻松地将其添加回来。
但是如果用户只能读/写他们自己的项目,我会以不同的方式对数据进行建模:
"items": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
"$itemID": {
}
}
}
这对模型来说简单得多,并且会为您提供更好的可伸缩性,因为数据库只需考虑一个用户的数据。