Ниже приведены правила, определенные в моем наборе правил.
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;
}
И я смог получить завершенные события и ушел с ошибкой разрешения для предстоящих событий.