Я пытаюсь написать некоторые правила, позволяющие пользователям получать доступ только к тем документам, на которые у них есть права.
У меня есть две коллекции: коллекция "Путешествия" и "Пользователи".
В коллекции "Путешествия" есть несколько поездок (документов) с именами "001", "002", "003", ...
В коллекции пользователей есть пользователи (документы) с именами "user1@mail.com", "user2@mail.com", ...
Внутри каждого пользователя есть объект (карта), который называется "allowTravels", в котором я отслеживаю, какие путешествия может видеть этот пользователь. Примерно так:
travels: {
001: {
name: 'Nice travel'
},
002: {
name: 'Amazing Trip'
}
}
users: {
user1@email.com: {
allowedTravels: {
001: {
hasPayed: true
}
}
},
user2@mail.com: {
allowedTravels: {
001: {
hasPayed: false
},
002: {
hasPayed: true
}
}
}
}
Я хочу разрешить пользователям доступ к проездным документам, только если у них есть к ним доступ, в этом случае у пользователя 1 должен быть доступ к поездке 001, а у пользователя 2 - к поездке 001 и 002.
Что я хочу проверить, так это то, есть ли внутри документа пользователя в объекте allowTravels свойство с именем «проездного документа». Если так: разрешить, если нет: отказать
На данный момент мои правила выглядят так:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if isSignedIn();
}
}
function isSignedIn() {
return request.auth.uid != null;
}
}
То, что я пробовал, было примерно таким:
match /{document} {
return exists(/users/${request.auth.email}/allowedTravels/{document})
}
Каков был бы правильный способ достичь того, что я ищу?
Я ценю любую помощь, которую вы можете оказать мне. спасибо!