我有静态节点,例如(users-technical-services-orders),
例如(技术),我仅对同一技术创建(写限制),但允许对所有已通过身份验证的用户写入3个字段。
我可以这样:
{
"rules": {
//
"phonenumbers":{
".read": true,
".write": "auth !== null"
},
"services":{
".read": true,
".write": "auth !== null"
},
"subservices":{
".read": true,
".write": "auth !== null"
},
"ChargeRecordsProv":{
".read": "auth !== null",
".write": "auth !== null"
},
"ChargeRecordsUsers":{
".read": "auth !== null",
".write": "auth !== null"
},
"ExchangeRecords":{
".read": "auth !== null",
".write": "auth !== null"
},
"directions":{
".read": "auth !== null",
".write": "auth !== null"
},
"orders":{
".read": "auth !== null",
".write": "auth !== null"
},
"setting":{
".read": "auth !== null",
},
"technical":{
".read": "auth !== null",
"$user_id": {
".write": "$user_id === auth.uid"
},
"balancepro": {
".write": "auth !== null"
},
"ratingNumClinets": {
".write": "auth !== null"
},
"ratingDegree": {
".write": "auth !== null"
},
"statusProv": {
".write": true
}
},
"users":{
".read": "auth !== null",
"$user_id": {
".write": "$user_id === auth.uid"
}
}
}
}
这对我的静态节点很有用。
问题是:
我有一个像(Technicians_Carpenter_location)这样的动态节点,他的名字不知道,因为它取决于管理员可以设置的内容。
这些动态节点将不允许使用我以前的规则进行读取或写入。 如果我添加这样的公共规则:
".read": "auth !== null",
".write": "auth !== null"
可以读取和写入,但这将影响所有先前针对静态节点的规则,并且将不起作用。
所以,请提个建议,我该怎么办?
答案 0 :(得分:1)
我认为您正在寻找一个wildcard rule,它与所有其他规则未匹配的子节点匹配。这样的规则的一个简单示例是:
{
"rules": {
"profiles": {
"$profileid": {
".read": true
}
}
}
}
使用上述规则,任何人都可以读取特定的配置文件(例如/profiles/puf
),但是任何人都不能一次读取所有配置文件(/profiles
)。
因此,在您的情况下,如果要向特定的命名节点授予特定的权限,并向所有其他节点授予一组通用的权限,则可以将通配符添加到当前节点。像这样:
{
"rules": {
"phonenumbers":{
".read": true,
".write": "auth !== null"
},
...
"$other": {
".read": "auth !== null",
".write": "auth !== null"
}
}
}