Правила безопасности Firestore для обмена данными между пользователями

#firebase #google-cloud-firestore #firebase-security

#firebase #google-облако-firestore #firebase-безопасность

Вопрос:

Представьте, что я хочу создать приложение, которое позволяет пользователям управлять списком покупок. Пользователь должен иметь возможность делиться своим списком покупок с другими пользователями, но пользователи, которые не были «приглашены», не должны иметь доступа к этим данным.

Если я хочу реализовать это без обмена данными, я могу довольно легко защитить пользовательские данные:

 service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId}/list {
      allow read, update, delete: if request.auth != null amp;amp; request.auth.uid == userId;
      allow create: if request.auth != null;
    }
  }
}
 

Но как я могу убедиться, что «приглашенные» пользователи также могут читать и записывать в эти документы?

Данные будут храниться следующим образом:

 - Collection: Lists
    - Subcollection: Items
 

В List документе, вероятно, потребуется отслеживать, каким пользователям разрешено добавлять или удалять Items .

Комментарии:

1. Как вы планируете объявлять «приглашенных» пользователей? В списке в документе? Как документы в коллекции?

2. Я полагаю, это будет зависеть от реализации правил безопасности, но я обновил свой вопрос.

Ответ №1:

Объявляйте приглашенных пользователей во вложенной коллекции, которая выглядит следующим образом /users/{userId}/list/invited/{userId}

В правилах Firestore вы можете проверить, существует ли документ с идентификатором пользователя во вложенной коллекции приглашенных пользователей.

 service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId}/list {
      allow read, write: if request.auth != null amp;amp; exists(/databases/$(database)/documents/users/$(userId)/list/invited/$(request.auth.uid));
    }
  }
}