Использование Firebase Firestore Я храню данные чата в документах, содержащих некоторые данные, такие как:
roomName
roomAvatar
createDate
isDeleted
Мое приложение и мои правила требуют, чтобы эти поля были установлены при "создании" документа.Однако я также хотел бы разрешить «обновлять» документ авторизованным пользователям.
У меня уже есть проверки, позволяющие только определенным пользователям обновлять документ и проверять, что они НЕ будутразрешено изменять поля, такие как «createDate».Но я не могу создать правило, которое заставляет авторизованного пользователя не удалять поле «createDate», передавая FiledValue.delete () или используя ref.set (objectMissingCreateDate).
Наконец, яНе думайте, что клиенту необходимо обновить все поля данных при обновлении, если он пытается обновить только одно или два поля.
У меня есть правило «обновления», как указано ниже:
allow update: if isAuthenticated() && isMemberOfRoom() &&
(
(!("roomName" in request.resource.data) ||
request.resource.data.roomName == resource.data.roomName ||
hasRoomPermission("UpdateRoom")) &&
(!("roomAvatar" in request.resource.data) ||
request.resource.data.roomAvatar == resource.data.roomAvatar ||
hasRoomPermission("UpdateRoom")) &&
(!("createDate" in request.resource.data) ||
request.resource.data.createDate == resource.data.createDate) &&
(!("isDeleted" in request.resource.data) ||
request.resource.data.isDeleted == resource.data.isDeleted ||
hasRoomPermission("DeleteRoom"))
);
Основная проблема заключается в защите данных от авторизованного пользователя, передающего FieldValue.delete () или использующего [Android] docRef.set (), в то время как пропускаются обязательные значения.
Я бы даже принялфункциональность для отключения FieldValue.delete () и деструктивных операций «set» для клиентов без прав администратора.