【发布时间】:2020-10-18 23:12:15
【问题描述】:
我目前正在开发一个所有身份验证用户都可以创建帖子的页面。帖子也应该是可编辑的,但只能由创建者编辑。此外,具有特定电子邮件地址的管理员应该能够编辑帖子。
这是我的安全角色:
{
"rules": {
"shoes" : {
".read": true,
"$shoeID" : {
".write" : "root.child('shoes').child($shoeID).child('postowner').val() === auth.uid && auth != null && root.child('users').child(auth.uid).child('uid').val() === auth.uid || auth.token.email === 'admin@admin.com'"
}
},
"websites" : {
".read": true,
"$shoeID" : {
"$storeID" : {
".write" : "root.child('websites').child($shoeID).child($storeID).child('postowner').val() === auth.uid && auth != null && root.child('users').child(auth.uid).child('uid').val() === auth.uid || auth.token.email === 'admin@admin.com'"
}
}
},
"users" : {
"$uid" : {
".read" : "auth != null && root.child('users').child($uid).child('uid').val() === auth.uid"
}
}
}
}
这是我的数据库结构:
我认为我做错了什么,因为按照我当前的规则,任何用户都可以更改数据。
【问题讨论】:
-
不太可能是问题的原因,但节目的写入规则中的
root.child('users').child(auth.uid).child('uid').val() === auth.uid对我来说似乎是个问题。如果您想强制执行该完整性,您只需要在对/users/$uid的写入操作中执行此操作,而不是在每个单独的鞋子写入中。
标签: firebase firebase-realtime-database firebase-security