Определение правил безопасности Firebase - PullRequest
0 голосов
/ 02 февраля 2020

Ниже приведены правила, определенные в моем наборе правил.

match /{document=**} {
         allow read: if request.time < resource.data.end ;
         allow read: if request.time > resource.data.end ;
         allow read: if resource.data.start > request.time;
}

Для запроса:

this.afs.collection<events>('events', ref => ref.where('end' , '>' , firestore.Timestamp.now())).snapshotChanges();

Я не знаю, почему Firebase выдает ошибку разрешения:

ОШИБКА FirebaseError: Отсутствует или недостаточно разрешений.

Где, как для запроса:

this.afs.collection<events>('events', ref => ref.where('end' , '<' , firestore.Timestamp.now())).snapshotChanges();

Firebase не выдает никаких ошибок и позволяет читать.

Может кто-нибудь объяснить, почему я получаю ошибку?

ОБНОВЛЕНИЕ

Я занимаюсь разработкой приложения, которое отображает список событий из базы данных, охватывающий более двух дней с текущего времени, и имеет возможность регистрации событий. Приложение также отображает события, зарегистрированные пользователем, которые еще не начались в разделе UPCOMING, и зарегистрированные события, которые завершены в разделе COMPLETED. События, которые имели время начала в прошлом и время начала в будущем (через 3+ дня), не отображаются в приложении.

Раньше я использовал системное время клиента, но проблема в том, что пользователь мог сменить устройство. время в прошлом, чтобы увидеть все события в прошлом, и пользователь может изменить время на будущее (через 3+ дня), чтобы увидеть все предстоящие события.

Позже, я мог предотвратить обман времени, определив приведенное ниже правило для моей БД.

match /{document=**} {
         allow read: if resource.data.start > request.time;
 }

Это правило предотвращает читерство времени, но с одним только этим правилом у меня возникли проблемы с получением предстоящих событий (request.time resource .data.end). Итак, я включил правила

match /{document=**} {
         allow read: if request.time < resource.data.end ;
         allow read: if request.time > resource.data.end ;
         allow read: if resource.data.start > request.time;
 }

И я смог получить завершенные события и ушел с ошибкой разрешения для предстоящих событий.

1 Ответ

0 голосов
/ 02 февраля 2020

Исходя из того, что вы сказали здесь:

С помощью этих правил я пытаюсь отобразить предстоящие события (request.time ресурс). data.end)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...