Правила безопасности Cloud Firestore «если существует» не работают - PullRequest
0 голосов
/ 10 мая 2019

У меня есть простое приложение чата в Cloud Firestore со следующим правилом безопасности, которое позволяет пользователям отправлять сообщения в чат-комнату только в том случае, если они «присоединились» к комнате в самом приложении:

match /hangouts/{hangout}/messages/{message} {
        allow create, write, update, read: if exists(/databases/$(database)/documents/users/{userId}/hangout/{hangout});
    }

Если у пользователя есть HangoutID в своей коллекции в Firestore, ему следует разрешить отправить сообщение этому HangoutID. Тем не менее, я все еще получаю сообщения об ошибках:

Write at hangouts/ChIJPRVm2R7H54kRKLP2ttsuUko/messages/17225E70-B708-4033-AE5A-D0CBBD1BC69F failed: Missing or insufficient permissions.

У меня также есть 2 других правила, связанных с видеовстречами. Возможно ли, что они мешают?

match /hangouts/{hangout} {
    allow read, update, write, create: if request.auth.uid != null;
}

match /hangouts/{hangout}/members/{userId} {
    allow read: if request.auth.uid != null;
  allow create, update, write, delete: if request.auth.uid == userId;
}

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

Что я делаю не так? Я немного новичок в этой концепции.

Спасибо !!

1 Ответ

1 голос
/ 10 мая 2019

Похоже, вы неправильно выполняете подстановку путей к документам. В части соответствия вы используете {фигурные скобки}, чтобы указать, где находятся подстановочные знаки, но в выражении пути вы используете имя подстановочного знака, например, $ (this).

/databases/$(database)/documents/users/$(userId)/hangout/$(hangout)
...