Правила Firestore, ограничивающие пользователей для чтения / записи только их данных - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь ограничить пользователей своими собственными данными, но в настоящее время данные обмениваются. Я провел некоторые исследования ( SO Вопрос , Документы Firebase ), но они не сработали для меня. Я мог бы пропустить решение.

Правила БД:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }

    match /users/{userId} {
      allow read, write: if request.auth.uid == userId;

      match /{document=**} {
        allow read, write: if request.auth.uid == userId;
      }
    }
  }
}

Данные БД:

users: [{
    {userId}: {
        email: "...",
        fullName: "...",
        uId: "..." // same as key
        tasks: [{
            {unique taskId}: {
                id: "...", // same as key
                desc: "...",
                priority: 3,
                completed: false
            }
        }]
    }
}]

Запрос данных (угловой):

this.afStore
    .collection(`users`)
    .doc(`${this.authService.getUserId()}`)
    .collection(`tasks`, ref => {
            return ref
                .where('completed', '==', completed)
                .orderBy(sortField, sortOrder);
        }).snapshotChanges().pipe(
                ...
        );

Это проблема правил или проблема с данными / запросами? Я думаю, что я упускаю что-то незначительное с правилами ...

1 Ответ

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

Это ваше правило:

match /{document=**} {
  allow read, write: if request.auth != null;
}

Безоговорочно применяется к всем документам в вашей базе данных. Когда правило разрешает доступ к документу, оно всегда предоставляет доступ к нему, независимо от того, какие другие правила применяются.

Это правило говорит о том, что все пользователи имеют права на чтение и запись всех документов в вашей базе данных. Если это не то, что вы хотите, удалите правило полностью. Замените его только теми правилами, которые разрешают доступ только к тем документам, которым должен быть разрешен доступ только тем пользователям, которые должны это делать.

Чтобы быть совершенно ясным - у вас не может быть правила, позволяющего впоследствии отменить доступ к документу по другому правилу. Если какое-либо правило разрешает доступ, то этот доступ будет разрешен независимо от того, что говорят другие правила.

...