(Повторная публикация после исправления всех ошибок в предыдущих сообщениях.)
Я занимаюсь разработкой веб-приложения для 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;
}
}
}
Есть идеи, где я ошибся и как это исправить?