В общем случае правила .validate используются для определения того, какие данные должны выглядеть как , если они существуют. Они намеренно не запускаются, когда данные удаляются. Вместо этого вы должны использовать правила .write, чтобы принимать решения о том, разрешено ли писать (или удалять).
Например, рассмотрите эти правила для обеспечения безопасности в простой комнате чата, где пользователи могут создавать новые чаты, но только удалить те, для которых они являются владельцем:
{
"rules": {
".read": true,
"$room": {
".write": "auth != null && (
(!data.exists() && newData.child('owner').val() == auth.uid) ||
(!newData.exists() && data.child('owner').val() == auth.uid))",
".validate": "newData.hasChildren(['owner', 'name'])",
"name": {
".validate": "newData.val().length > 10"
},
"messages": {
".write": "auth != null"
}
}
}
}
Правило .write используется, чтобы решить, имеет ли пользователь разрешение на создание / удаление комнаты чата, а также правила .validate для определения то, что должно выглядеть в чате, если оно существует.
Если при удалении были выполнены правила .validate, вы никогда не сможете удалить чат-комнату (поскольку оба правила .validate завершились с ошибкой). Следовательно, решение не запускать правила проверки на удаление.