Я пытаюсь прочитать путь в моей базе данных Firebase Realtime /users/uid1
, где значение в пути null
.По сути, его не существует.Мои правила безопасности позволяют читать по пути (правила ниже).Когда на самом деле чтение данных, разрешение отказано.
Правила безопасности следующие:
{
"rules": {
"users": {
"$uid": {
".read": "root.child('users').child($uid).child('mUser_Role').child('mRole_PermissionLevel').val() > 400 || root.child('users').child(auth.token.phone_number).child('mUser_Role').child('mRole_PermissionLevel').val() == 500"
}
}
}
}
Попытка чтения /users/uid1
при /users/myuid/mUser_Role/mRole_PermissionLevel == 500
, равном true
, завершается неудачей с запрещенным разрешением.
Как Firebase определяет, что в разрешении должно быть отказано в случае, когда значение равно null
?Разве это чтение не должно быть разрешено и возвращать dataSnapshot
, где dataSnapshot.exists()
возвращает false
?
Я не указал никаких правил для data
при пути null
, и чтение завершается успешно, если значение в пути не null
РЕДАКТИРОВАТЬ - Чтобы воспроизвести этот сценарий -
1.Загрузите JSON в корень базы данных Firebase в реальном времени db-
{
"users" : {
"+9198100xxxxx" : {
"mUser_Id" : "+9198100xxxxx",
"mUser_ProfilePicUrl" : "url",
"mUser_Role" : {
"mRole_Name" : "Employee",
"mRole_PermissionLevel" : 500
}
},
"+9198100yyyyy" : {
"mUser_Id" : "+9198100yyyyy",
"mUser_ProfilePicUrl" : "url",
"mUser_Role" : {
"mRole_Name" : "Employee",
"mRole_PermissionLevel" : 500
}
}
}
}
2.Правила базы данных Firebase в реальном времени (фактически используются для этого узла) -
{
"rules": {
"users": {
"$uid": {
".read": "root.child('users').child($uid).child('mUser_Role').child('mRole_PermissionLevel').val() > 400 || root.child('users').child(auth.token.phone_number).child('mUser_Role').child('mRole_PermissionLevel').val() == 500"
}
}
}
}
3.Использовать симулятор правил безопасности Firbease -
Тип симуляции - read
Местоположение - /users/+9198100zzzzz
(сбой симулированного чтения)
Местоположение - /users/+9198100yyyyy
(симуляцияуспешное чтение)
Аутентифицировано - yes
Поставщик - custom
Полезная нагрузка токена аутентификации -
{
"provider": "phoneauth",
"uid": "6f2eed52-b2e9-409a-b5f1-dc307c7f6671",
"token":{
"phone_number": "+9198100xxxxx"
}
}