Правила безопасности Firestore - PullRequest
0 голосов
/ 09 мая 2018

Я использую Firebase и имею следующую схему для users:

{
     "uid": "randomUID",
     "domain": "@domain1"
}

и у меня есть коллекция domains, содержащая все домены пользователей, например:

{
    "@domain1": {
                    "uid": "randomUID"
                }
}

Я пытаюсь использовать правила безопасности Firestore, чтобы предотвратить создание новых пользователей, имеющих тот же домен, что и pr-существующий. Это то, что я до сих пор:

service cloud.firestore {
    match /databases/{database}/documents {
        match /users/{Id} {
         allow read: if true;
         allow create: if exists(/databases/$(database)/documents/domains/$(resource.data.domain)) == false;
  }
}

Но это не работает. Я также попробовал следующие комбинации правила allow create, но ни одна из них не сработала:

if !exists(/databases/$(database)/documents/domains/$(resource.data.domain));

и

if !exists(/databases/$(database)/documents/domains/$(request.resource.data.domain));

Есть идеи или предложения? Отладка правил безопасности является сложной задачей, поскольку отладчика еще нет.

1 Ответ

0 голосов
/ 26 августа 2018

Во-первых, вы не можете получить доступ к resource без первого доступа к request. Затем, когда вы используете

if !exists(/databases/$(database)/documents/domains/$(request.resource.data.domain));

вы пытаетесь найти домен пользователя, которого собираетесь создать. Пока это может работать. Но вы уверены, что значение request.resource.data.domain абсолютно равно пути созданного вами domain?

Поскольку, если вы сделали это с помощью метода add(...) для добавления новых доменов, эти значения не будут одинаковыми.

...