Skip to main content
Полный перечень полей — в глоссарии.

Обзор

Этот раздел отвечает за две задачи: показать и отредактировать собственный профиль, а также управлять карточками сотрудников компании (роли, точки аренды, зарплата). Сюда же входит служебный вход по одноразовому кросс-токену и общий набор вспомогательных функций поиска пользователя, привязки к компании и проверки уникальности. Важно с самого начала различать два разных сценария:
  • «Мой профиль» — пользователь читает и правит только собственные базовые данные (имя, фамилия, почта, аватар, пароль). Роли, точки и зарплату через этот путь изменить нельзя, даже если они показываются при чтении.
  • «Управление сотрудником» — привилегированное создание и редактирование карточки другого пользователя вместе с ролями, точками аренды и зарплатой. Здесь роли записываются в членство пользователя в компании, а зарплата и точки — в свои отдельные записи.
Роли (Группа прав, Сотрудник, Субарендатор, Суперпользователь компании) физически хранятся не в самом пользователе, а в его членстве в компании. Один и тот же человек в разных компаниях может иметь разные роли. Пароль при этом один глобальный.

Профиль пользователя (чтение и обновление)

Адрес профиля доступен только авторизованному пользователю и работает всегда с его собственной записью: объект выбирается по идентификатору текущего пользователя из токена, а не по идентификатору из URL. Подставить чужой идентификатор невозможно.

Что подмешивается к профилю при чтении

Перед отдачей профиль дополняется тремя вычисляемыми значениями:
Список точек фильтруется по текущей компании: один и тот же пользователь, открывая профиль под разными компаниями, увидит разные наборы точек. Основная точка — это просто первый элемент массива точек (нумерация в базе начинается с единицы), а не какая-то специально помеченная «главная» точка.

Что видно и что можно менять

  • На чтение отдаётся детальный профиль: базовые поля, роли (только для чтения), основная и полный список точек, сумма зарплаты.
  • На запись доступен ограниченный набор: только имя, фамилия, аватар, почта и пароль.
Ключевой момент: при чтении профиля видны роли, точки и зарплата, но изменить их через сохранение собственного профиля нельзя — при записи используется урезанный набор полей. Это защита от того, чтобы пользователь сам себе не выдал права или не переписал зарплату. Все «лишние» поля, присланные в запросе на сохранение, просто игнорируются.
При сохранении собственного профиля почта проверяется на уникальность (см. раздел о проверке уникальности), при этом текущий пользователь исключается из проверки, чтобы сохранение без смены почты не выдавало ложную ошибку «почта занята». Пароль, если он передан, сохраняется в захешированном виде.

Управление карточкой сотрудника

Расширенная форма создания и редактирования обслуживает привилегированный сценарий — заведение и правку сотрудников компании. Он затрагивает сразу несколько сущностей.

Поля

Что происходит при создании

  1. Из входных данных отделяются роли, зарплата, точки и пароль.
  2. Создаётся сам пользователь.
  3. Создаётся (или обновляется) членство этого пользователя в текущей компании с указанными ролями.
  4. Пересчитывается лимит на число сотрудников компании.
  5. Если передан пароль — он сохраняется захешированным.
  6. Если переданы точки — они привязываются к пользователю. Первая привязка становится активной только если у пользователя ещё нет ни одной активной точки; иначе новые точки добавляются как неактивные.
  7. Если сумма зарплаты задана (и не нулевая) — создаётся или обновляется запись о зарплате.

Что происходит при обновлении

Логика близка к созданию, но с двумя отличиями:
  • Точки синхронизируются полностью: точки, которых нет в новом списке, удаляются, оставшиеся и новые — привязываются заново. То есть присланный список полностью замещает прежний набор.
  • Роли: если роль не пришла в запросе, для флагов подставляется текущее значение пользователя, а Группа прав при отсутствии значения обнуляется.
Зарплата и точки записываются только если значение «истинно». Пустая или нулевая сумма зарплаты не обнулит уже сохранённую зарплату — она просто будет пропущена. Чтобы фактически изменить зарплату, нужно прислать ненулевое число.
Лимит на количество сотрудников пересчитывается при создании нового сотрудника. Это часть контроля тарифных ограничений компании.

Вход по разовой ссылке

Чтобы человек мог перейти в систему без повторного ввода логина и пароля, ему выдаётся разовая ссылка перехода. Открыв её, он оказывается в системе уже авторизованным. Как это работает:
  1. Система проверяет, что ссылка ещё действительна и ни разу не использована.
  2. Ссылка сразу помечается использованной — повторно она уже не сработает.
  3. По ней определяется, кому она принадлежит, и человек входит в систему.
  4. Обновляется отметка о последнем входе.
Ссылка одноразовая в полном смысле: она гасится в момент использования, поэтому два одновременных перехода по одной ссылке приведут к входу только один раз. Если человеку нужно перейти снова, ему выдаётся новая ссылка — кнопка перехода в компанию всегда выдаёт непогашенную.
Недействительная, истёкшая или уже использованная ссылка вход не выполняет: обращение отклоняется с понятной ошибкой «токен недействителен или уже использован», а не отвечает успехом без данных для входа.

Вспомогательные функции пользователей

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

Поиск пользователя

Ищет пользователя последовательно по телефону, затем по почте, затем по имени пользователя — берётся первое непустое из переданных значений. В пределах одного поля возвращается пользователь с наименьшим идентификатором. Если ничего не передано или ничего не найдено — возвращается пустой результат.

Привязка к компании

Создаёт участие человека в компании с заданными ролями. Если компания не определена (например, без выбранной компании) — привязка не выполняется. Используется механизм «получить или создать»: если членство уже есть, повторный вызов не перезапишет его роли.
Привязка к компании не обновляет существующее членство — она только создаёт недостающее. Для изменения ролей уже привязанного сотрудника используется сценарий управления карточкой сотрудника, а не эта функция.

Проверка уникальности

Настоящая защита уникальности по телефону, почте и имени пользователя. Для каждого заполненного значения проверяется, нет ли уже другого пользователя с таким же значением; текущий пользователь при правке исключается из проверки по его идентификатору. При нахождении дубликатов возвращается понятное сообщение об ошибке по каждому конфликтующему полю (например, «Пользователь с такой почтой уже существует»).
Именно эта функция — реальная точка контроля уникальности при входе, регистрации и правке профиля. Проверять уникальность на уровне интерфейса недостаточно; окончательное решение принимает она.

Как это используется

  • Мобильные и веб-клиенты открывают «Мой профиль» на чтение, чтобы показать данные и роли пользователя, и на запись — чтобы обновить базовые поля или сменить пароль.
  • Раздел управления сотрудниками использует расширенную форму для заведения и правки карточек с ролями, точками и зарплатой.
  • Кросс-токен применяется для бесшовного перехода в систему без повторного ввода логина и пароля.

Связанные страницы

Глоссарий: Профиль и управление пользователями

Полный перечень полей профиля, карточки сотрудника и вспомогательных функций.

Пользователи и доступ

Обзорная страница раздела: аккаунт, участие в компании, роли и права.

Проблемы и логические ошибки

Сводка известных багов и логических изъянов всего модуля в одном месте.

Аккаунт и участие в компании

Как аккаунт связан с телефоном, как устроено участие в компаниях и откуда берутся роли.

Вход в систему

По каким данным можно войти — телефон, логин или адрес почты — и откуда берутся права.

Сессии и срок действия входа

Сколько живёт вход, как он продлевается и когда потребуется войти заново.

Как система определяет вашу компанию

Определение компании по адресу сайта или по аккаунту и что делать, если компании ещё нет.

Сброс пароля по коду

Восстановление доступа по коду из письма, с ограничением частоты запросов.

Вход через Google

Вход по аккаунту Google и связывание его с существующим профилем.

Уровни лояльности и карты

Уровни лояльности клиентов и оформление их карт для Apple и Google Wallet.