Я занимаюсь разработкой веб-приложения для Firebase и Firestore, и вот что я пытаюсь сделать:
Пользователи могут загружать свои собственные сообщения и устанавливать его видимость для публикации c или личное.
Любой зарегистрированный пользователь может видеть публикации c, но только пользователи, подписавшиеся на него, могут просматривать личные сообщения. Я пытаюсь написать правила безопасности для этого.
Вот структура базы данных:
db.collection('posts').doc({postid})
//When a user writes a post, a new document is created. Includes the boolean 'public' field and the 'uid' field, which stores the writer's uid.
db.collection('subscription').doc({viewer_user_id})
//Once the logged-in user subscribes to another user, a document is created under the user's UID. The doc includes array of the UID of the users the viewer is subscribing.
Вот описания соответствующих полей под каждым из документов в коллекциях 'posts' и 'subscription':
posts/{postid}: {
'uid': Writer's uid (String)
'public': Boolean value to reflect visibility. If false, it is private.
}
subscription/{viewer's uid}: {
'subscription': Array of uids of the users the viewer is subscribing.
}
Итак, для личных документов основная идея c состоит в том, чтобы просмотреть документ зрителя в коллекции подписок, получить данные и проверить включен ли там идентификатор писателя. Это потребует некоторых Javascript кодов, но я не знаю, какой синтаксис будет в правилах безопасности Firestore, или это возможно или нет там с самого начала.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function publicOrSubscribed() {
return request.auth.uid!=null&&(resource.data.public==true|| /*What could be the syntax here??*/)
}
match /posts/{postid} {
allow read: if publicOrSubscribed();
allow create: if request.auth.uid!=null;
allow update, delete: if request.auth.uid==resource.data.userid;
}
}
}
Есть предложения? Если это невозможно в правилах безопасности, какой может быть обходной путь? Заранее спасибо!