Firebase Организация членства в документе - PullRequest
0 голосов
/ 09 июля 2019

Я создаю приложение в Firebase, которое должно гарантировать, что пользователи могут только читать / писать документы / коллекции, принадлежащие их команде.Мой вопрос в основном, как я должен структурировать данные о членстве.В частности, вот одна идея, которую я обдумывал:

/teams/{teamid}
{
   displayName: "Company X Team",
   owner: "userid",
   members: ["email1", "email2", "email3"]
}

/teams/{teamid}/projects/{projectid}
{
    name: "My Project"
    otherProps: "Other Properties"
}

/users/{userid}
{
    displayName: "John Doe",
    email: "john.doe@somedomain.com"
}

Должен ли я хранить "члены" в виде массива как часть / команды / документа (как показано в примере кода выше)?Или я должен хранить его как отдельную коллекцию документов, очень похожую на / projects /?

Моя главная проблема - когда я иду и пишу правила безопасности.Я хочу убедиться, что только владелец или участники могут вносить изменения в / команды / и его подколлекции (например: /projects/).

Каким способом будет проще писать правила безопасности?Какой из них будет иметь лучшую производительность?

1 Ответ

2 голосов
/ 09 июля 2019

Я бы структурировал членов как подколлекцию вместо массива. Сделайте идентификатор документа каждого члена подколлекции идентификатором пользователя.

Затем вы можете просто написать простое правило безопасности exist (). Это также позволит вам хранить дополнительные данные о членстве (некоторые администраторы участников, когда они присоединились и т. Д.).

match /teams/{teamid}/projects/{projectid} {
      // Make sure a 'user' is a member of the team 
      allow write: if exists(/databases/$(database)/documents/teams/${teamid}/members/$(request.auth.uid))

}

https://firebase.google.com/docs/firestore/security/rules-conditions#access_other_documents

...