Правила базы данных firebase позволяют писать на конкретном узле
У меня есть следующая база данных:
actions : [ {
"added" : 1535293085383,
"countdown" : 9999999999,
"item" : 1,
"type" : "a"
}, {
"added" : 1535293085383,
"countdown" : 999999999,
"extra" : "bb",
"item" : "2",
"type" : "b"
}, {
"added" : 1635293085383,
"countdown" : 1,
"item" : 3,
"type" : "c"
}]
Я хочу, чтобы любой зарегистрированный пользователь мог прочитать все данные, но ТОЛЬКО ЗАПИШИТЕ УЗЕЛ ОБРАТНОЙ СВЯЗИ.
Моя идея заключается в том, что каждый раз, когда пользователи читают данные, уменьшают это значение, но им не разрешено обновлять любой другой узел.
Есть правила, которые я написал
{
"rules":{
".read":false,
".write":false,
"actions":{
".indexOn":[
"added"
],
".read": "auth != null",
"countdown":{
".write" : "auth != null"
}
}
}
это запрещает чтение от неаутентифицированных пользователей
это позволяет читать от аутентифицированных пользователей
это отрицательно, чтобы написать от аутентифицированных пользователей даже в узле обратного отсчета
как я могу это исправить
1 ответ
Вам не хватает уровня в ваших правилах безопасности. Прямо сейчас вы разрешаете писать /actions/countdown
, Но вы хотите разрешить писать /actions/*/countdown
, Чтобы зафиксировать это требование, используйте $
переменная в ваших правилах:
{
"rules":{
".read":false,
".write":false,
"actions":{
".indexOn": [ "added" ],
".read": "auth != null",
"$actionid": {
"countdown":{
".write" : "auth != null"
}
}
}
}
Теперь из-за $actionid
countdown/.write
Правило там применяется к каждому дочернему узлу /actions
,