Вопрос о ветке кораблей, развернутой ниже. Всюду только аутентифицированным пользователям разрешено записывать свои данные OWN везде. Однако есть одно исключение. ANY аутентифицированный пользователь может читать данные из ветки кораблей.Правило Firebase разрешает только удаление старых данных любым аутентифицированным пользователем
До сих пор у меня не было никаких проблем, но здесь специальное правило:
ANY Авторизованный пользователь может удалить ребенка под любой UID в филиал суда при условии, что метка времени составляет 10 секунд или старше.
Я хочу, чтобы любой пользователь мог позвонить:
firebase.database().ref('/ships/gp3tJa3tgThukt39EejqJpZq12L2/granit').remove();
uid: gp3tJa3tgThukt39EejqJpZq12L2
shipid: granit
И быть предоставлено право на удаление только.
Для того, чтобы проверить возраст записи хранить в perf
массиву firebase.database.ServerValue.TIMESTAMP
по индексу 0
(я использую массив здесь, потому что эта запись часто обновляется, и я хочу, чтобы сохранить данные к минимуму).
На стороне клиента программа может видеть, когда срок действия протокола истек, и только затем вызывать удаление. Это во избежание расточительных неудачных вызовов.
Мне нужна помощь, чтобы определить правильное правило. Строка, о которой идет речь, выделена во втором примере, где я попытался определить это правило.
{
"ships": {
"EnBawzb0CjZVgAKrMZD4HE3k5rW2": {
"oasisoftheseas": {
"param": {
"scale": 0.33075936163570846,
"type": "cruise/royalcaribbean/oasisoftheseas"
},
"perf": {
"0": 1,
"1": 1.11014724E7,
"2": 1.70473256E7,
"3": 115.7,
"timeStamp": 1475144447302
}
}
},
"gp3tJa3tgThukt39EejqJpZq12L2": {
"granit": {
"param": {
"scale": 0.12235531736978282,
"type": "riverbarge/granit"
},
"perf": {
"0": 5,
"1": 2.05622392E7,
"2": 13154087,
"3": 285.9,
"timeStamp": 1475144450086
}
}
}
}
}
Ниже правил. Это правило записи для $ shipid, которое меня интересует правильно.
{
"rules": {
"anchors": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid === $uid"
}
},
"completed": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid == $uid"
}
},
"ships": {
".read": "auth !== null",
"$uid":{
".write": "auth.uid === $uid",
"$shipid":{
".write": "((auth !== null) &&
(now - data.child('perf').child('timeStamp').val() >= 10000))"
}
}
},
"shipslog": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid === $uid"
}
}
}
}
Вы включили изображение дерева JSON в свой вопрос. Пожалуйста, замените это на фактический JSON как текст, который вы легко можете получить, нажав кнопку «Экспорт» в консоли базы данных Firebase. Наличие JSON в качестве текста делает его доступным для поиска, позволяет нам легко использовать его для тестирования с вашими фактическими данными и использовать его в нашем ответе, и в целом это просто хорошая вещь. То же самое для правил. –
Привет, Франк. Я заменил изображения данными JSON. Я обновил правило, и я думаю, что теперь он работает. Тем не менее, я был бы очень признателен за ваши отзывы. Я полагаю, что нет среднего уровня, что такое происходит всегда. Кстати, я абсолютно люблю firebase. Просто начал использовать его и провел большую часть моих дней обучения. –
Эй, Пол.Я скопировал ваши правила в тестовую базу данных, и симулятор разрешает операцию удаления (которую я имитирую, написав «null» на '/ ships/gp3tJa3tgThukt39EejqJpZq12L2/granit'). Разве это не то, что вы пытаетесь? –