Правило Firestore, позволяющее пользователям получать только чаты, участниками которых они являются?Javascript

Форум по Javascript
Ответить
Anonymous
 Правило Firestore, позволяющее пользователям получать только чаты, участниками которых они являются?

Сообщение Anonymous »

У меня есть следующие документы чата:

Код: Выделить всё

{
members: ['abc','def'] // 2 element list of member UIDs
// some other chat metadata
}
В моей коллекции Firestore действуют следующие правила:

Код: Выделить всё

function authed() {
return request.auth != null;
}

match /chats/{chatId} {

allow create: if authed()
&& request.resource.data.members is list
&& request.resource.data.members.size() == 2
&& request.auth.uid in request.resource.data.members;

allow read, update: if authed()
&& resource.data.members is list
&& request.auth.uid in resource.data.members;

allow list: if authed();
Последнее предложение (

Код: Выделить всё

allow list: if authed();
) необходим, чтобы пользователи могли запускать следующий запрос в моем клиентском приложении:

Код: Выделить всё

const q = query(
chatsRef,
where(MEMBERS_PROPERTY, 'array-contains', userId),
orderBy(LAST_MESSAGE_AT_PROPERTY, 'desc'),
limit(limitCount)
);
Без этого я бы получил ошибку Firebase. Тем не менее, это правило по-прежнему разрешает любому пользователю извлекать чаты любого другого пользователя (я тестировал его, вручную заменяя UID другого пользователя вместо userId).
Из того, что я прочитал в этом последнем предложении, я не могу проверить предложениеwhere фактического запроса и убедиться, что userId соответствует request.auth.uid, и что правило чтения, которое применяется к каждому отдельному сопоставленному документу должен запрещать чтение чатов других пользователей, но, похоже, у меня этого не происходит.
Может ли кто-нибудь помочь мне сказать мне, что я не так сделал в своем правиле?

Подробнее здесь: https://stackoverflow.com/questions/798 ... members-of
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»