#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));
}
}
}