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

Что это за слой

Эта страница описывает слой прав и настроек уведомлений: как для каждого сотрудника хранится матрица «канал × тема», кто её видит и редактирует, и как система сама достраивает недостающие строки, чтобы у любого сотрудника всегда был полный набор переключателей. Идея простая: у каждого сотрудника есть таблица подписок. По строкам — темы событий (например, «Заявка забронирована», «Возврат по операции», «Низкий баланс SMS»), по столбцам — три канала доставки: веб, мобильный push и Telegram. На пересечении стоит флажок «Включено/Выключено». Именно этот флажок решает, придёт ли конкретному сотруднику конкретный тип события по конкретному каналу.
Полная матрица одного сотрудника — это три канала, умноженные на весь каталог тем. На момент написания каталог содержит 27 тем, значит полная матрица — это 3 × 27 = 81 строка на сотрудника.

Модель данных

Каждая запись «Доступ к уведомлениям» — это одна ячейка матрицы: связка сотрудника, канала и темы плюс флаг включения.
Комбинация «компания + сотрудник + канал + тема» уникальна. То есть для одного сотрудника не может быть двух строк с одинаковой парой «канал × тема» — на каждую ячейку матрицы приходится ровно одна запись.

Каналы доставки

Каналов ровно три:

Каталог тем

Тема — это классификатор события. Он используется не только для управления доступом, но и для фильтрации и группировки уведомлений в других частях модуля. Ниже — полный каталог тем, сгруппированный по смыслу. Служебная
  • По умолчанию — общая тема для событий без отдельной классификации.
Заявки
  • Заявка забронирована
  • Заявка завершена
  • Просрочка по заявке
  • Смена статуса оплаты заявки
Финансовые операции
  • Операция создана
  • Возврат по операции
  • Операция удалена
Клиенты
  • Превышен лимит долга клиента
  • Клиент добавлен в чёрный список
Документы
  • Документ создан
  • Документ подписан
Инвентаризация
  • Инвентаризация создана
  • Чек-лист инвентаризации
Доставка
  • Доставка назначена
  • Смена статуса доставки
  • Доставка завершена
  • Доставка отменена
Техобслуживание
  • Подходит срок ТО
  • ТО назначено
  • ТО завершено
Инвентарь и SMS
  • Инвентарь сломан
  • Низкий баланс SMS
  • Ошибка SMS
  • Возврат SMS
Интеграции
  • Штраф создан (сервис автомобильных штрафов)
  • Получено сообщение Wazzup
Каталог тем — «живой» справочник: при добавлении новой темы в код полная матрица автоматически расширяется, и каждый сотрудник со временем получит новые переключатели через механизм ленивого досоздания (см. ниже).

Как сотрудник видит и меняет свои настройки

Есть один адрес настроек доступа. Он доступен только авторизованному сотруднику и работает всегда в контексте текущей компании и текущего пользователя — то есть сотрудник видит и меняет только свои собственные настройки. Постраничная разбивка отключена: список всегда возвращается целиком. Адрес совмещает два режима:
  • Чтение (запрос списка) — отдаёт матрицу доступов сотрудника. При этом служебные поля (компания и владелец) в ответ не включаются: наружу отдаются канал, тема, флаг включения и технический идентификатор строки.
  • Запись (массовое обновление) — принимает список настроек и применяет их разом.

Ленивое досоздание полной матрицы

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

Массовое обновление (создать или обновить)

Режим записи принимает не одну ячейку, а список настроек. Каждый элемент списка — это тройка: канал, тема и новое значение флага «Включено». Обработка идёт единой транзакцией и работает по принципу «создать или обновить»:
  1. Система сначала считывает, какие пары «канал × тема» у сотрудника уже есть.
  2. Те элементы списка, для которых строки ещё нет, — создаются с переданным значением флага.
  3. Те, для которых строка уже существует, — обновляются: у них меняется только флаг «Включено».
Обновление затрагивает исключительно флаг включения. Канал и тему у существующей строки массовое обновление не переписывает — пара «канал × тема» служит ключом, по которому находится нужная ячейка.
Обе части — создание недостающих и обновление существующих — выполняются в одной транзакции. Если что-то пойдёт не так, изменения не применятся частично: либо весь пакет настроек сохраняется, либо ничего.

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

Матрица доступов задумана как источник правды о том, кому и куда доставлять уведомления. При рассылке события система сверяется с флагами включения соответствующих ячеек, чтобы отобрать получателей по нужным каналам. Таким образом слой доступа работает как «предохранитель» веерной рассылки: даже если событие сгенерировано, конкретный сотрудник получит его по конкретному каналу только тогда, когда у него включена соответствующая ячейка матрицы.

Особенности поведения

  • Все недостающие ячейки при ленивом досоздании создаются со значением «Включено», поэтому новые темы, добавленные в каталог, для всех сотрудников автоматически оказываются подписанными без явного согласия.
  • Создание недостающих строк и обновление существующих при массовом сохранении выполняются в одной транзакции, поэтому частичное применение пакета невозможно: либо сохраняется всё, либо ничего.
  • Массовое обновление меняет у существующей строки только флаг включения; канал и тема при обновлении не переписываются — они служат ключом поиска ячейки.
  • Адрес всегда работает только с настройками текущего сотрудника в текущей компании и не позволяет читать или менять чужие подписки; постраничная разбивка отключена.
  • Размер полной матрицы вычисляется как произведение числа каналов на число тем (на момент написания 3 × 27 = 81 строка на сотрудника) и растёт автоматически при расширении каталога тем.

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

Глоссарий: Доступ и настройки

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

Уведомления (доставка и доступ)

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

Модель и веер доставки

Модели уведомления и его получателей, сигнал сохранения и разветвление доставки по каналам с учётом доступов.

Создание и группировка

Фоновые задачи создания уведомлений: одиночные, по объекту и сгруппированные в 30-минутном окне.

Каналы доставки

Транспортные задачи и сервис: веб-доставка, мобильный push с деактивацией мёртвых токенов и Telegram-рассылка.

Чтение, архивация и список

Адреса списка, счётчика непрочитанных, отметки прочтения и архивации с фильтрами.

Push-токены устройств

Регистрация и отписка push-токенов мобильных устройств сотрудника с уникальностью по устройству.

Привязка Telegram

Привязка и отвязка аккаунта сотрудника к Telegram-боту по одноразовому коду верификации.