Правила Firestore для доступа к определенным документам в коллекции на основе подписки - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть коллекция постов, где несколько авторов создают посты.Эти посты могут быть двух типов: премиум и общие.Премиум-сообщения могут быть прочитаны только пользователем, подписчиком автора.

Ниже приводится структура базы данных

posts/  
**randomid**  
    authorid : 1 
    ispremium : true  
    content : "some content"  
**otherrandomid**  
    authorid : 2  
    ispremium : false  
    content : "some content"  

users/  
 **useruid1**  
   name : 'somename'  
   authorSubscribedByMe  
     1 : true  
 **useruid2**  
   name : 'someothername'  
   authorsSubscribedByMe  
     2 : true  

Мне нужны два типа запросов,

  1. все общие сообщения

    ref = db.collection('posts').where('ispremium','==',false)
    
  2. все сообщения премиум-класса определенного автора

    ref = db.collection('posts').where('ispremium','==',true)
                                .where('authorid', '==', 1)
    

Так что я не уверен, каксоздать правила безопасности для этого.Мы можем проверить подписку, используя get в правилах безопасности, поэтому второе легко.Но я где-то читал, что firestore оценивает запрос перед его выполнением, поэтому в этом случае ему может понадобиться фильтр для автора, и он не может выполнить запрос для всех общих сообщений.Пожалуйста, помогите мне в достижении цели.

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

...