правила FireBase: имеет ли пользователь право видеть документ - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь написать некоторые правила, позволяющие пользователям получать доступ только к тем документам, на которые у них есть права.

У меня есть две коллекции: коллекция "Путешествия" и "Пользователи".

В коллекции "Путешествия" есть несколько поездок (документов) с именами "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})
}

Каков был бы правильный способ достичь того, что я ищу? Я ценю любую помощь, которую вы можете оказать мне. спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...