Настройка правил Firebase - PullRequest
0 голосов
/ 15 апреля 2020

У нас есть структура firebase как прикрепленное изображение.

enter image description here

Мои текущие правила:

 "Games":{
     ".read":"query.orderByChild == 'email' ",
     "$gid":{
        ".read":true,
        ".write":true
     },
     ".write":false,
}

Это помогает отключить доступ к родителю, но когда пропущен пустой идентификатор электронной почты он выбирал всю базу данных, так можно ли проверить длину электронной почты, используя правила?

1 Ответ

0 голосов
/ 15 апреля 2020

Мне сложно проверить этот ответ вслепую (поэтому возьмите его с крошкой соли), но я надеюсь, что это поможет вам направленно.

Так что «загрузка» в вашем случае означает способность читать db.ref ('/ Games') не должна быть доступна, но пользователь (или определенная группа пользователей?) должен иметь возможность читать db.ref ('Games / $ gameId').

Согласно этой статье: https://firebase.google.com/docs/database/security/securing-data#rules_are_not_filters

Вы не можете достичь этого с правилами безопасности, ограничивающими ".read": false на уровне "/ Games", потому что это предотвратит чтение для любого из идентификаторов игры, поскольку правило безопасности будет каскадным.

вы можете попробовать использовать запросы в качестве способа «фильтрации», как описано в статье:

"Games":{
     ".read":"query.orderByChild == 'email' ",
     "$gid":{
        ".read": "query.orderBy("email") && query.equalTo === $gid",
        ".write":true
     },
     ".write":false,
}

Итак, ваша БД запрос должен выглядеть примерно так:

gamesRef = database.ref('Games').orderByChild('gameId').equalTo(20204315123456)

Выше предполагается, что gameId также является свойством каждого элемента $ gameId в списке игр. Приведенный выше запрос проверит список игр для детей, чье свойство «gameId» и оно равно значению, предоставленному клиентом (так же, как ключ).

Надеюсь, что это поможет вам.

...