То, что вы ищете, - это сделать поле неизменяемым. Вы делаете это, проверяя в своих правилах, что значение поля после запроса такое же, как и до него.
У меня есть простая вспомогательная функция для этого в моих правилах:
function isUnmodified(key) {
return request.resource.data[key] == resource.data[key]
}
Затем я вызываю эту функцию из моих write
(или create
и update
) правил:
allow update: if isAdmin() || isUnmodified('name');
Так что в моем примере выше любой администратор (как определено моей isAdmin
функцией)) может изменить поле имени, но другие пользователи не могут.