Обновите «имя пользователя» одноразовое правило - PullRequest
0 голосов
/ 07 мая 2019

Мне нужно правило пожарного магазина, которое проверяет истину, только если имя пользователя никогда не изменяется ...

FirebaseAuth : Если пользователь новый, функция устанавливает случайное имя пользователя.Затем пользователь меняет это случайное имя пользователя.Теперь мне нужно правило, которое устанавливает имя пользователя «IMMUTABLE» (только один раз). Итак: можно ли попробовать с логическим флагом в документе: «isUsernameChanged»?

Для каждого документа у меня есть правило 'isOwner', и это нормально, но я хочу, чтобы он не мог два раза менять поле имени пользователя и только поле имени пользователя 2 раза, в документе есть другие поля, которыеон всегда может обновить.

Я не хочу (я бы не стал) менять структуру, может быть, лучше новую подборку ...?или, может быть, 'isUsernameChanged' должен войти в новую (под) коллекцию?

grazie

1 Ответ

0 голосов
/ 08 мая 2019

это мое решение

function isUsernameCambiabile(){
    return (request.resource.data.username == resource.data.username || !getIfUsernameIsChanged() )
}
function getIfUsernameIsChanged(){
  return exists(/databases/$(database)/documents/users/$(request.auth.uid)/isUsernameChanged/$(request.auth.uid))
}
match /users/{idUser} {
...
allow update: if (isOwner(idUser) && isUsernameCambiabile()) 

match /isUsernameChanged/{idUser} {
  allow read: if isOwner(idUser) || isSuperAdmin();
  allow create: if isOwner(idUser) || isSuperAdmin();
  allow update: if false;
  allow delete: if false;
    }
}

, когда пользователь обновляет свое имя пользователя в первый раз ... пакетный набор документов с таким же идентификатором uid в под-коллекции isUsernameChanged, под-коллекции как флаг!?

я могу сделать лучше?ТНХ

...