Обзор
Этот раздел отвечает за две задачи: показать и отредактировать собственный профиль, а также управлять карточками сотрудников компании (роли, точки аренды, зарплата). Сюда же входит служебный вход по одноразовому кросс-токену и общий набор вспомогательных функций поиска пользователя, привязки к компании и проверки уникальности. Важно с самого начала различать два разных сценария:- «Мой профиль» — пользователь читает и правит только собственные базовые данные (имя, фамилия, почта, аватар, пароль). Роли, точки и зарплату через этот путь изменить нельзя, даже если они показываются при чтении.
- «Управление сотрудником» — привилегированное создание и редактирование карточки другого пользователя вместе с ролями, точками аренды и зарплатой. Здесь роли записываются в членство пользователя в компании, а зарплата и точки — в свои отдельные записи.
Роли (Группа прав, Сотрудник, Субарендатор, Суперпользователь компании) физически хранятся не в самом пользователе, а в его членстве в компании. Один и тот же человек в разных компаниях может иметь разные роли. Пароль при этом один глобальный.
Профиль пользователя (чтение и обновление)
Адрес профиля доступен только авторизованному пользователю и работает всегда с его собственной записью: объект выбирается по идентификатору текущего пользователя из токена, а не по идентификатору из URL. Подставить чужой идентификатор невозможно.Что подмешивается к профилю при чтении
Перед отдачей профиль дополняется тремя вычисляемыми значениями:Список точек фильтруется по текущей компании: один и тот же пользователь, открывая профиль под разными компаниями, увидит разные наборы точек. Основная точка — это просто первый элемент массива точек (нумерация в базе начинается с единицы), а не какая-то специально помеченная «главная» точка.
Что видно и что можно менять
- На чтение отдаётся детальный профиль: базовые поля, роли (только для чтения), основная и полный список точек, сумма зарплаты.
- На запись доступен ограниченный набор: только имя, фамилия, аватар, почта и пароль.
Управление карточкой сотрудника
Расширенная форма создания и редактирования обслуживает привилегированный сценарий — заведение и правку сотрудников компании. Он затрагивает сразу несколько сущностей.Поля
Что происходит при создании
- Из входных данных отделяются роли, зарплата, точки и пароль.
- Создаётся сам пользователь.
- Создаётся (или обновляется) членство этого пользователя в текущей компании с указанными ролями.
- Пересчитывается лимит на число сотрудников компании.
- Если передан пароль — он сохраняется захешированным.
- Если переданы точки — они привязываются к пользователю. Первая привязка становится активной только если у пользователя ещё нет ни одной активной точки; иначе новые точки добавляются как неактивные.
- Если сумма зарплаты задана (и не нулевая) — создаётся или обновляется запись о зарплате.
Что происходит при обновлении
Логика близка к созданию, но с двумя отличиями:- Точки синхронизируются полностью: точки, которых нет в новом списке, удаляются, оставшиеся и новые — привязываются заново. То есть присланный список полностью замещает прежний набор.
- Роли: если роль не пришла в запросе, для флагов подставляется текущее значение пользователя, а Группа прав при отсутствии значения обнуляется.
Лимит на количество сотрудников пересчитывается при создании нового сотрудника. Это часть контроля тарифных ограничений компании.
Вход по разовой ссылке
Чтобы человек мог перейти в систему без повторного ввода логина и пароля, ему выдаётся разовая ссылка перехода. Открыв её, он оказывается в системе уже авторизованным. Как это работает:- Система проверяет, что ссылка ещё действительна и ни разу не использована.
- Ссылка сразу помечается использованной — повторно она уже не сработает.
- По ней определяется, кому она принадлежит, и человек входит в систему.
- Обновляется отметка о последнем входе.
Ссылка одноразовая в полном смысле: она гасится в момент использования, поэтому два одновременных перехода по одной ссылке приведут к входу только один раз. Если человеку нужно перейти снова, ему выдаётся новая ссылка — кнопка перехода в компанию всегда выдаёт непогашенную.
Вспомогательные функции пользователей
Общий служебный слой, переиспользуемый входом, регистрацией и профилем.Поиск пользователя
Ищет пользователя последовательно по телефону, затем по почте, затем по имени пользователя — берётся первое непустое из переданных значений. В пределах одного поля возвращается пользователь с наименьшим идентификатором. Если ничего не передано или ничего не найдено — возвращается пустой результат.Привязка к компании
Создаёт участие человека в компании с заданными ролями. Если компания не определена (например, без выбранной компании) — привязка не выполняется. Используется механизм «получить или создать»: если членство уже есть, повторный вызов не перезапишет его роли.Привязка к компании не обновляет существующее членство — она только создаёт недостающее. Для изменения ролей уже привязанного сотрудника используется сценарий управления карточкой сотрудника, а не эта функция.
Проверка уникальности
Настоящая защита уникальности по телефону, почте и имени пользователя. Для каждого заполненного значения проверяется, нет ли уже другого пользователя с таким же значением; текущий пользователь при правке исключается из проверки по его идентификатору. При нахождении дубликатов возвращается понятное сообщение об ошибке по каждому конфликтующему полю (например, «Пользователь с такой почтой уже существует»).Как это используется
- Мобильные и веб-клиенты открывают «Мой профиль» на чтение, чтобы показать данные и роли пользователя, и на запись — чтобы обновить базовые поля или сменить пароль.
- Раздел управления сотрудниками использует расширенную форму для заведения и правки карточек с ролями, точками и зарплатой.
- Кросс-токен применяется для бесшовного перехода в систему без повторного ввода логина и пароля.
Связанные страницы
Глоссарий: Профиль и управление пользователями
Полный перечень полей профиля, карточки сотрудника и вспомогательных функций.
Пользователи и доступ
Обзорная страница раздела: аккаунт, участие в компании, роли и права.
Проблемы и логические ошибки
Сводка известных багов и логических изъянов всего модуля в одном месте.
Аккаунт и участие в компании
Как аккаунт связан с телефоном, как устроено участие в компаниях и откуда берутся роли.
Вход в систему
По каким данным можно войти — телефон, логин или адрес почты — и откуда берутся права.
Сессии и срок действия входа
Сколько живёт вход, как он продлевается и когда потребуется войти заново.
Как система определяет вашу компанию
Определение компании по адресу сайта или по аккаунту и что делать, если компании ещё нет.
Сброс пароля по коду
Восстановление доступа по коду из письма, с ограничением частоты запросов.
Вход через Google
Вход по аккаунту Google и связывание его с существующим профилем.
Уровни лояльности и карты
Уровни лояльности клиентов и оформление их карт для Apple и Google Wallet.