Журнал действий администраторов
В пятницу вечером каталог показывает не то. Цены не те, половина товаров пропала с витрины, у кого-то появились права, которых не должно быть. Вопрос один: кто это сделал и что именно поменял. Штатный «Журнал вторжений» скажет, что элемент изменён, — и на этом остановится. Резервная копия вернёт вчерашний день целиком, вместе с работой всех остальных.
Модуль отвечает на вопрос точно: вот человек, вот время, вот поле, вот прежнее значение.
РАЗНИЦА «БЫЛО — СТАЛО», А НЕ «ОБЪЕКТ ИЗМЕНЁН»
В карточке события видно каждое затронутое поле: слева то, что было, справа то, что стало. Название, активность, цена, статус заказа, состав групп, значение настройки. Разговор «кто сломал карточку» заканчивается за минуту.
Разница считается честно. Битрикс сохраняет объект частями: в запросе приходят только те поля, которые правили. Поэтому сравниваются пришедшие поля, а не полный снимок, — иначе правка одного названия выглядела бы в журнале восемью изменениями, и толку от такого журнала не было бы.
ВОЗВРАТ ОДНОГО ЗНАЧЕНИЯ
Рядом с каждым изменением кнопка «Вернуть». Возвращается одно поле одной записи, а не состояние портала на вчера: откатить объект целиком — значит стереть чужую работу, сделанную после. Перед возвратом модуль сверяет текущее значение: если поле меняли ещё раз, он предупредит, а не затрёт молча. Сам возврат тоже пишется в журнал.
СЕМЬ ОБЛАСТЕЙ, КАЖДАЯ ВКЛЮЧАЕТСЯ ОТДЕЛЬНО
Контент инфоблоков — название, активность, тексты, раздел, символьный код. Каталог — цены и остатки, то, из-за чего чаще всего и спрашивают «кто поменял цену». Заказы — статус, суммы, отмена, комментарии. Пользователи. Группы и права. Настройки модулей. Вход в административный раздел.
На большом каталоге список инфоблоков ограничивается теми, где история действительно нужна.
ЛЮДИ ОТДЕЛЕНЫ ОТ МАШИН
У каждого события записан источник: админка, витрина, обмен с 1С, агент, консоль, REST. Обмен, агенты и консоль по умолчанию не пишутся, а в списке есть флажок «только люди». Без этого ночной обмен, который трогает остатки всего каталога, за неделю превратил бы журнал в свалку, где не найти человека. Техническую учётную запись интеграции можно исключить отдельно.
СЕКРЕТЫ В ЖУРНАЛ НЕ ПОПАДАЮТ
Если в имени поля есть pass, token, key, secret, hash или другое слово из списка, значение заменяется точками ещё до записи в базу: сам факт изменения виден, значение — нет. Журнал читают шире, чем настройки модулей, и он не должен становиться местом, где пароли лежат в открытом виде. Список слов настраивается.
ПИСЬМО О ТОМ, ЧТО МЕНЯЮТ РЕДКО
Права, настройки модулей и учётные записи меняют осознанно и нечасто. Неожиданное изменение здесь — повод разобраться сегодня, а не в конце квартала. Модуль отправляет одно письмо на пачку таких событий, а не письмо на каждое: письма, приходящие по десятку в час, перестают читать — а нужны они именно тогда, когда что-то пошло не так.
ЖУРНАЛ НЕ РАСТЁТ БЕСКОНЕЧНО
Срок хранения задаётся в настройках, критичные события живут вдвое дольше — именно их спрашивают при разборе инцидента. Чистка идёт агентом пачками, чтобы не держать блокировки на большой таблице. Длинные тексты обрезаются: хранить полное описание товара в каждой записи незачем.
ПРАВА
Три уровня: доступ закрыт, просмотр журнала, полный доступ с настройками и возвратом значений. Тот, кто читает журнал, не обязан иметь право его править.
ЧЕГО МОДУЛЬ НЕ ДЕЛАЕТ
Не заменяет резервную копию: возвращается одно поле, а не портал. Не заменяет контроль версий контента — тот хранит документ целиком и предназначен редактору, а журнал отвечает администратору на вопрос «кто». Не следит за посетителями витрины: сюда попадают действия тех, кто может что-то изменить. Не правит ядро и не подменяет штатные страницы.
ГРАНИЦЫ ВЕРСИИ 1.0
Семь областей, перечисленных выше. Свойства элементов записываются как изменения полей элемента, отдельной истории по каждому свойству нет. Заказы и вход не откатываются: у заказа своя логика статусов и оплат, а вход — событие, а не состояние. Выгрузки журнала в файл в этой версии нет.
ТРЕБОВАНИЯ
— 1С-Битрикс: Управление сайтом или Битрикс24 в коробке, главный модуль 20.0.0 и новее;
— PHP 8.2 и новее;
— MySQL 5.7+ / MariaDB 10.3+ либо PostgreSQL (для PostgreSQL — главный модуль 23.900.900 и новее);
— модули «Информационные блоки», «Торговый каталог» и «Интернет-магазин» — по желанию: без них соответствующие области просто не включаются;
— работающие агенты (в идеале — запуск по крону): ими идут чистка журнала и письмо.