Я новичок в использовании Firebase и чувствую себя полностью потерянным с правилами БД. Мне нужно разрешить пользователям читать элементы, у которых поле владельца равно определенному значению.
У меня есть структура записей:
{
"books" : {
"-LKwbZsfy55d24kwX4tf" : {
"description" : "Adventures",
"title" : "Captain Donsak",
"owner" : "b7bS753Hvc0fmQ24Jnc"
},
"-LKwc1Xna07nequDtpF6" : {
"description" : "History",
"title" : "World War II",
"owner" : "hLoOnnv4883Vhvm9Vt4"
},
"-LKwi4qcsqbgvZPdhCXp" : {
"description" : "Adventures",
"title" : "Sea Wolf",
"owner" : "umV4hFm96vpdwBytx63"
}
}
}
Я пробовал несколько вариантов правил, включая следующие (они были предоставлены в документах Firebase), но в любом случае он возвращает 0 пунктов, когда я применяю любое из этих правил.
{
"rules": {
"books": {
".read": "data.child('owner').val() === 'umV4hFm96vpdwBytx63'",
".write": "auth != null"
}
}
}
{
"rules": {
"books": {
"$uid":{
".read": "root.child('owner').val() == 'umV4hFm96vpdwBytx63'",
".write": "auth != null"
}
}
}
}
Если я просто укажу
".read": "auth != null"
возвращает все записи, но это не то, что мне нужно.
Я использую простую команду js для чтения данных:
const itemsRef = firebase.database().ref('books');
По сути, мне нужно отфильтровать данные с использованием правил безопасности, но это невозможно, как указано в RenaudTarnec ниже. Поэтому мне придется использовать js для фильтрации:
const itemsRef = firebase.database().ref('books').orderByChild('owner').equalTo(owner);
Пожалуйста, сообщите, что может быть не так.
Спасибо.