Firebase为不同的子系统提供不同的安全规则
我的数据结构是这样的 我希望只有管理员才能创建新用户, 只有管理员才能写入expireDate, 管理员和用户都可以写入其他两个字段 我试过这些dabase规则:Firebase为不同的子系统提供不同的安全规则,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我的数据结构是这样的 我希望只有管理员才能创建新用户, 只有管理员才能写入expireDate, 管理员和用户都可以写入其他两个字段 我试过这些dabase规则: 我允许管理员为所有子项编写,但管理员无法创建新用户。我知道firebase数据库规则在级联中覆盖,但如何在这里实现。一旦您在JSON树的某个级别授予用户读写权限,您就不能再在树的较低级别剥夺该权限 这意味着: 更多人可以编写的数据应该位于JSON树的较低级别。 或者,您需要根据需要的访问级别将数据放在不同的顶级注释中。 因为您的数据结
我允许管理员为所有子项编写,但管理员无法创建新用户。我知道firebase数据库规则在级联中覆盖,但如何在这里实现。一旦您在JSON树的某个级别授予用户读写权限,您就不能再在树的较低级别剥夺该权限 这意味着: 更多人可以编写的数据应该位于JSON树的较低级别。 或者,您需要根据需要的访问级别将数据放在不同的顶级注释中。 因为您的数据结构没有遵循1的指导,所以这意味着您应该遵循2 比如:
users: {
user1: { ... },
user2: { ... }
expiries
user1: { ... },
user2: { ... }
然后通过以下方式保护这两个顶级节点之间的访问:
{
"rules": {
"users":{
"$uid": {
".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()",
},
"expiries":{
"$uid": {
".read": "root.child('admins').child(auth.uid).exists()",
}
}
}
谢谢,我知道了,但我有一个问题,为什么管理员不能在用户中写入,因为所有字段都对管理员开放??根据您的规则,没有人能够在/用户中写入。在/users/$uid上授予访问权限。但是,如果你在写这些新规则时遇到问题,请打开一个新问题,然后继续。
{
"rules": {
"users":{
"$uid": {
".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()",
},
"expiries":{
"$uid": {
".read": "root.child('admins').child(auth.uid).exists()",
}
}
}