Правила безопасности Firebase Firestore: как правильно установить несколько условий? - PullRequest
0 голосов
/ 04 мая 2020

(Повторная публикация после исправления всех ошибок в предыдущих сообщениях.)

Я занимаюсь разработкой веб-приложения для Firebase, где пользователи могут создавать свои собственные сообщения и подписываться на других пользователей. Вот структура для коллекции / документов / индексов.

db.collection('posts').doc({postid})
   -public: Boolean value. If false, only the writer and the users who subscribed to the writer can see it.
   -uid: UID of the writer

db.collection('subscription').doc({uid})
   -subs_uid: Array of the uid of the users whom the user is subscribing. 

Вот правила безопасности, которые я хочу написать:

  • Создать: Любой вошедший в систему пользователь может создать сообщение.
  • Обновление / удаление: можно обновить / удалить, если это его / ее собственный пост.
  • Чтение: пользователь может прочитать сообщение, если для него установлено значение publi c, если это его / ее собственный пост, или если пользователь подписывается на пользователя, который загрузил пост

Ниже приведено правило безопасности, которое я написал. Хотя он отлично работает для создания / обновления / удаления, для операции «чтение» он, похоже, не работает вообще. Я протестировал все три сценария ios, но ни один из них не работает. Даже если для всех сообщений установлено значение «publi c»! Я думаю, что это синтаксическая ошибка.

rules_version = '2';
  service cloud.firestore {
    match /databases/{database}/documents {     
      match /posts/{postid} {
         allow read: if (resource.data.public==true || 
                         resource.data.uid==request.auth.uid || 
                         resource.data.uid in get(/databases/$(database)/documents/subscription/$(request.auth.uid)).data.subs_uid);
         allow create: if request.auth.uid!=null;
         allow update, delete: if  request.auth.uid==resource.data.uid;
    }
  }
}

Есть идеи, где я ошибся и как это исправить?

...