По правилам поля в правилах безопасности Firestore - PullRequest
1 голос
/ 17 октября 2019

У меня есть куча документов, каждый из которых содержит несколько полей. Как я могу написать правила, которые применяются только к определенному полю в каждом документе?

Например, если мои документы выглядят так:

{
  "displayName": "John Doe", // read and write
  "accessLevel": 3 // read only
}

Как я могу сделать это так, чтобы вы могли

  • Считать отображаемое имя и уровень доступа
  • Записать на отображаемое имя
  • Не записать на уровень доступа

Имеюпросмотрел много видео и документов Firestore и не нашел ничего такого, что показывало бы, как вы будете использовать этот контроль для каждого поля.

1 Ответ

0 голосов
/ 17 октября 2019

То, что вы ищете, - это сделать поле неизменяемым. Вы делаете это, проверяя в своих правилах, что значение поля после запроса такое же, как и до него.

У меня есть простая вспомогательная функция для этого в моих правилах:

function isUnmodified(key) {
  return request.resource.data[key] == resource.data[key]
}

Затем я вызываю эту функцию из моих write (или create и update) правил:

  allow update: if isAdmin() || isUnmodified('name');

Так что в моем примере выше любой администратор (как определено моей isAdmin функцией)) может изменить поле имени, но другие пользователи не могут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...