我有这样的数据结构。
我希望,只有管理员可以创建新用户, 只有管理员可以写expireDate, 管理员和用户都可以编写其他两个字段,
我尝试了以下dabase规则:
{
"rules": {
"users":{
"$uid": {
".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()",
"expireDate":{
".write": "root.child('admins').child(auth.uid).exists()"
},
"firstLoginAttempt":{
".write": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()"
},
"macAddress":{
".write": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()"
}
}
}
我允许管理员为所有子代写,但管理员无法创建新用户。我知道Firebase数据库规则会在级联中覆盖,但是如何在此处实现。
答案 0 :(得分:1)
在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()",
}
}
}