# #firebase #firebase-realtime-database #firebase-authentication #firebase-security
Вопрос:
Я управляю списком заблокированных, я хочу, чтобы пользователям в списке заблокированных было запрещено писать/читать базу данных (запрещено). Но если я напишу это на более высоком уровне, все остальные правила, приведенные ниже, не будут работать для пользователей, которые не находятся в списке заблокированных. Есть ли способ по-прежнему писать его на более высоком уровне вместо редактирования всех таблиц ниже?
{
"rules": {
".write": "!root.child('blocked').child(auth.uid).exists() ",
".read": "!root.child('blocked').child(auth.uid).exists() ",
"scores": {
"$sid": {
".read": true,
".write": "root.child('game').child($sid).child(auth.uid).exists()amp;amp; auth!=null"
},
"games": {
"$sid": {
".read": true,
".write": "root.child('location').child($sid).child(auth.uid).exists()amp;amp; auth!=null"
}
},...
Ответ №1:
К сожалению, правила базы данных Firebase RealtimeDatabase работают каскадно:
Как говорят врачи:
правила чтения и записи работают сверху вниз, при этом более мелкие правила переопределяют более глубокие правила . Если правило предоставляет разрешения на чтение или запись по определенному пути, оно также предоставляет доступ ко всем дочерним узлам под ним. Рассмотрим следующую структуру:
Это означает, что если вы разрешите или запретите в родительском узле, это переопределит правила дочернего узла. В вашем случае блокировка сработает, но если кто-то не будет заблокирован, ему будут разрешены все дочерние узлы независимо от того, какие правила вы для них написали.
Вам нужно интегрировать это с ||
оператором для каждого дочернего узла.