Я пытался заставить это правило работать какое-то время, и я просто не могу понять его.
Структура моих данных следующая:
games {
*gameid* {
gamecode: *some gamecode*
players {
0 {
playerId: *some playerid*
}
1 {
playerId: *some playerid*
}
etc.
}
etc.
}
Так что в основном у меня есть игры, в которых каждая игра имеет уникальный идентификатор и содержит следующие данные: код игры, список игроков и некоторые другие данные. Проблема в том, что я хочу, чтобы только игроки из списка игроков в игре имели доступ для чтения ВСЕХ игроков этой игры, а не только самих себя.
Я думаю, что для этого требуется какой-то второй подстановочный знак, но я Кажется, я не могу найти, возможно ли это в правилах Firebase.
Вот то, что я придумал, и это наиболее близко подходит к решению:
"games": {
"$gid": {
"players": {
".read": "auth.uid != null && data.child('$uid').child('playerId').val() === auth.uid",
".write": false
}
}
}
Это не работает Возможно, потому что он использует $ uid в качестве фактического идентификатора вместо подстановочного знака. Когда я заменяю его фактическим ключом плеера, он работает.
Кто-нибудь знает, если и как я могу это сделать? Заранее спасибо.
РЕДАКТИРОВАТЬ:
Я остановился на использовании UID в качестве фактических ключей для игроков и использование data.child (auth.uid) .exists (), чтобы проверить, существует ли игрок .