Firestore, где пункт с правилами безопасности - PullRequest
0 голосов
/ 26 декабря 2018

Предположим, существуют следующие правила

service cloud.firestore {
    match /databases/{database}/documents {
        function roomAccess() {
            return resource.data.allow_anonymous == true || (request.auth.uid == resource.data.uid);
        }
        function writeOnlyOwner() {
            return request.auth.uid == resource.data.uid;
        }
        match /rooms/{room_id} {
          allow read: if roomAccess();
          allow write: if writeOnlyOwner();
          allow create: if request.auth.uid != null;
        }   
    }
}

Кроме того, именно так выглядит документ в коллекции rooms Json format

Вопрос Есть ли способ запросить определенную комнату, где access_key установлено какое-то значение?

 db.collection('rooms')
            .where('access_key', '==', access_key)
            .get()

Важно отметить, что я запрашиваю как creator комнаты (и room.uid с совпадает с моим uid

Тем не менее, он не работает с правами доступа. И документация, по-видимому, не описывает такое поведение.

Что касаетсякак я понял, запрос не выполняется, потому что может быть some комнат, с этим access_key, для которых roomAccess() потерпит неудачу. Но я не могу найти способ обойти это.

1 Ответ

0 голосов
/ 26 декабря 2018

Моя проблема заключалась в том, что я должен был проверить resource.data.allow_anonymous == true || request.auth.uid != null, так как я хотел получить комнату, либо если пользователь аутентифицирован, либо он является общедоступным.

В этом случае все документы, полученные access_key запрос соответствует ограничениям безопасности

...