Lemme介绍我的问题,我想建立一个像咨询服务的产品,用户发送他们的问题(帖子),然后管理员给他一个建议。
关于安全性,我更喜欢用户只能得到自己的问题,但管理员可以看到所有问题。
{
"rules": {
"profiles": {
"$uid": {
".read": "auth != null && (auth.uid == $uid || root.child('profiles').child(auth.uid).child('role').val() == 'admin')",
".write": "auth != null && (auth.uid == $uid || root.child('profiles').child(auth.uid).child('role').val() == 'admin')"
}
},
"posts": {
"$uid": {
".read": "auth != null && (auth.uid == $uid || root.child('profiles').child(auth.uid).child('role').val() == 'admin' || root.child('profiles').child(auth.uid).child('role').val() == 'admin')",
".write": "auth != null && (auth.uid == $uid || root.child('profiles').child(auth.uid).child('role').val() == 'user')"
},
".read": "auth != null && (root.child('profiles').child(auth.uid).child('role').val() == 'admin' || root.child('profiles').child(auth.uid).child('role').val() == 'mod')"
},
".read": false,
".write": false
}
}
从用户视图来看,它看起来相当不错,因为我可以快速获得属于该用户的帖子。但是,从admin-view来看,它真的很糟糕:
权衡,我已将所有帖子存储在普通数组中,例如:
posts: {
<post_id>: {
uid: <user_id>,
....
}
}
但后来我遇到了访问规则的问题,无法限制用户只访问自己的数据。如果没有读取规则,用户可以强制使用user-id来获取数据。
请你给我一个提示。提前谢谢!
P / S:我正在使用Firebase w / angular JS,没有后端服务器