UI-тесты прав доступа, которые обнаруживают реальные утечки в вашем приложении
Тесты прав в UI обнаруживают скрытые утечки доступа в кнопках, списках, экспортах и глубоких ссылках до того, как пользователи увидят данные, которых им не следовало бы видеть.

Почему проверки на бэкенде всё ещё оставляют пользователей уязвимыми
Бэкенд-проверка может остановить запрос на обновление, удаление или экспорт. Она не отменяет то, что пользователь уже увидел на экране.
Если страница загружает имена, цены, итоги по аккаунту или внутренние заметки до того, как API заблокирует следующее действие, утечка уже произошла. Поэтому тесты прав в UI важны. Контроль доступа — это не только запрет на запись. Это также гарантия того, что неправильный человек никогда не увидит данные, элементы управления, счётчики или маршруты изначально.
Распространённая ошибка — доверять скрытым кнопкам. Команды убирают кнопку «Редактировать» или «Экспорт» для ограничённой роли и считают страницу безопасной. Но пользователь всё ещё может вставить сохранённый URL, открыть глубокую ссылку из письма или загрузить страницу из истории браузера. Если экран рендерится первым, а проверка идёт позже, приватные данные могут мелькнуть на экране, даже когда финальное действие не выполнится.
Списки — ещё одна слабая точка. Многие приложения защищают страницу деталей, но забывают про таблицу, строку поиска или карточки-сводки. Этого достаточно, чтобы вытечь имена клиентов в результатах, счётчики заказов для другой команды, цены или скидки в строке таблицы, названия проектов в подсказках автозаполнения или итоги в виджетах дашборда. Для этого не нужен доступ на редактирование — пользователь многое узнает уже из списка.
Экспорты и массовые действия часто проскальзывают, потому что команды относятся к ним как к удобной функции, а не как к пути безопасности. Экран может правильно блокировать одну запись за раз, в то время как «Экспорт CSV» или «Выбрать всё» всё ещё выгружает данные по целому аккаунту. Одна пропущенная проверка превращает небольшую утечку в полный дамп данных.
UI также может подорвать доверие, даже если бэкенд в итоге скажет «нет». Если страница финансов открывается и показывает зарплатные числа на пару секунд перед редиректом, пользователи это заметят. Они могут сделать скриншот, скопировать значение или просто узнать то, что им никогда не следовало видеть.
Хорошее тестирование прав требует обеих полос. Бэкенд должен отклонять запрещённые действия, а интерфейс должен препятствовать появлению данных вообще, даже на мгновение. Если вы тестируете только ответы API, вы пропускаете утечки, которые реальные пользователи видят первыми.
Где обычно появляются утечки в UI
Утечки часто прячутся там, где команды считают риск минимальным. Сервер блокирует финальное действие, но UI всё ещё показывает имена, счётчики, опции или форматы файлов, о которых пользователь не должен знать.
Начните с очевидного уровня контроля. Кнопки "Новая", "Редактировать", "Удалить", "Одобрить" и массовых действий не должны мелькать на экране и затем исчезать. Даже краткий момент показывает пользователю, какие действия существуют. Это также подталкивает их пробовать прямые запросы, сохранённые URL или историю браузера.
Списки «текут» больше, чем многие ожидают. Скрытый счётчик строк может раскрыть, сколько клиентов, счетов или тикетов существует. Индикаторы статуса могут выдать внутренние состояния. Подсказки поиска могут возвращать имена из записей, которые пользователь открыть не может. Даже пустая таблица может спалить информацию, если в заголовке указано "148 результатов".
Несколько областей требуют дополнительного внимания:
- вкладки, которые подгружают данные, как только пользователь их открывает
- боковые панели и превью-деревья, которые загружают детали записи в фоне
- меню экспорта для CSV, PDF или таблиц
- массовые инструменты, которые действуют над выбранными строками, которые пользователь не должен видеть
- ссылки из почты, закладки и скопированные вкладки браузера
Вкладки — частый источник проблем. Пользователь кликает "Биллинг" или "Админ", и страница загружает итоги, имена аккаунтов или события аудита до того, как приложение проверит роль. Часто команды тестируют только основную страницу и пропускают лениво загружаемые части.
Экспорты нуждаются в собственных проверках. Многие приложения скрывают колонку на экране, но всё ещё включают её в CSV или таблицу для скачивания. PDF-экспорты могут протекать заметки, внутренние ID или полные контактные данные. Если пользователь видит только пять строк, экспорт не должен тихо включать пятьдесят.
Глубокие ссылки вызывают последний класс утечек. Пользователи открывают старую закладку, кликают ссылку из письма или вставляют сохранённый URL в новой сессии. Если приложение рендерит оболочку страницы, заголовок записи или хлебные крошки до того, как отклонит доступ, это всё ещё утечка. Хорошие UI-тесты прав проверяют весь путь, а не только финальный ответ API.
Составьте карту ролей и действий перед тестированием
Ошибки прав пропускают, когда команды тестируют экраны по одному без полной карты. Сначала разместите все роли на одной странице. Это может быть электронная таблица, таблица в документации или простой текстовый список. Формат менее важен, чем привычка.
Запишите роли слева, а действия — по верху. Держите действия простыми: просмотр, создание, редактирование, экспорт, удаление, одобрение и приглашение, если они есть в приложении. Если роль что-то может делать только в одной области, отметьте это сейчас, вместо того чтобы надеяться, что тестировщик запомнит позже.
Постройте простую матрицу
Хорошая матрица покрывает поля, а не только страницы. Многие утечки происходят потому, что пользователь может открыть нужный экран, но всё ещё видит неверные данные. Отметьте поля, которые требуют более жёстких ограничений, например зарплата, персональная почта, API-ключи, суммы по биллингу или внутренние заметки.
Затем добавьте условия, которые меняют доступ. Некоторые экраны ведут себя по-разному в зависимости от команды, аккаунта, региона, тарифного плана или статуса клиента. Менеджер в Команде A может редактировать только записи Команды A. Платный план может открывать экспорты, которые базовый план никогда не должен видеть. Пропустите эти условия — и ваши UI-тесты прав будут выглядеть полными, но упустят реальные слабые места.
Вам не нужна огромная таблица. Короткая матрица с именем роли, экраном или объектом, разрешённым действием, ограниченными полями и любым дополнительным условием (команда, план, аккаунт) обычно покрывает большую часть риска.
Начните с действий, которые быстро раскрывают данные клиентов. Экспорты, массовые действия, результаты поиска, списки записей и общие URL заслуживают внимания раньше, чем операции с низким риском вроде смены цвета метки или перестановки виджетов дашборда.
Приложение поддержки это быстро демонстрирует. Агент может просматривать тикеты и добавлять заметки, но не должен экспортировать все email-адреса клиентов. Лид команды может экспортировать тикеты только для своей команды. Финансы видят итоги счетов, а поддержка видит только статус оплаты. Эти различия нужно внести в карту до того, как кто-то откроет тестовую среду.
Эта подготовка кажется медленной — минут двадцать. Но затем она экономит часы случайных кликов и ловит важные утечки.
Тестируйте один экран шаг за шагом
Начните с самой слабой роли, которая всё ещё может войти. Именно там тесты прав в UI обычно находят проблемы, потому что админские аккаунты скрывают отсутствующие проверки. Если роль младшего сотрудника, подрядчика или «только для чтения» может получить слишком многое, пользователи заметят это задолго до того, как попадут логи бэкенда.
Откройте экран из меню в первую очередь. Если роль не должна иметь доступ к странице, пункт меню должен оставаться скрытым, поиск не должен подсказать её, а маршрут не должен загружаться через обычную навигацию.
Когда страница откроется, кликните всё, что видите. Команды часто тестируют главную кнопку и на этом останавливаются, но утечки прячутся в мелких контролах: кнопках действий в заголовке страницы, меню строк в таблицах, иконках редактора на месте, переключателях статуса, вкладках с подгрузкой данных и фильтрах, которые раскрывают записи, которых роль не должна видеть.
Следите за мелкими подсказками тоже. Отключённая кнопка всё ещё выдаёт намерение. Счётчики записей могут выдавать приватные данные. Форма без права сохранения всё ещё может показывать поля, которые пользователь никогда не должен читать.
Далее вставьте прямой URL на страницу деталей или редактирования. Многие приложения блокируют путь через меню, но забывают сам маршрут. Если страница загружается, даже на секунду, она может показать имена, цены, заметки или внутренние ID до того, как бэкенд отклонит финальное действие.
Обновите страницу и попробуйте снова после смены роли. SPA часто кэшируют данные о правах, поэтому экран может выглядеть корректным до полной перезагрузки, которая заставит выполнить свежие проверки. Если вы поменяли тестовый аккаунт с редактора на просмотрщика, а страница всё ещё показывает элементы редактирования до обновления, это реальная ошибка. Пользователи сталкиваются с тем же самым устаревшим состоянием в повседневной работе.
Простой пример делает это очевидным. Агент поддержки может открыть профиль клиента, но не должен редактировать данные биллинга. Меню скрывает редактор биллинга, и API сохранения возвращает 403. Но это всё ещё недостаточно, если вставленный URL редактирования открывает форму и показывает статус карты, заметки по счетам или правила скидок. Блокировка сохранения помогает, но утечка уже случилась.
Один экран, протестированный таким образом, даёт больше знаний, чем большой набор поверхностных проверок. Он показывает, что видит пользователь, на что он может нажать и к чему добраться, когда он пропускает обычный путь.
Проверяйте списки, счётчики и результаты поиска
Экраны со списками дают утечки чаще, чем многие ожидают. Заблокированная страница деталей мало помогает, если таблица уже показывает имена клиентов, email, цены или счётчики заказов.
Хорошее тестирование авторизации на фронтенде рассматривает страницу списка как чувствительные данные, а не просто как краткий путь к деталям. Если пользователь не должен иметь доступа к записи, самое безопасное по умолчанию — UI должен вести себя так, как будто этой записи нет.
Начните со счётчиков и сводок. Бейдж «127 просроченных счетов» может выдать активность по всей компании, даже если пользователь управляет только одним регионом. Итоги, количество строк, числа на графиках и пагинация всё это нуждается в такой же проверке.
Простое правило работает: сравнивайте то, что пользователь видит в строках, со всеми числами вокруг списка. Если таблица показывает 24 записи, а в заголовке указано 2 431, что-то не так.
Поиск требует прямых тестов на злоупотребление. Ищите точные имена, email, ID и номера заказов, которые принадлежат другой команде. Потом пробуйте частичные совпадения, разный регистр и старые сохранённые запросы. Ограниченные записи не должны появляться в строках, автодополнении, недавних поисках или в счётчиках результатов.
Сортировка и фильтры часто случайно выдают данные. Скрытая строка может оставаться невидимой в представлении по умолчанию, но появиться после сортировки по цене, фильтрации по статусу или перехода на страницу 2. Протестируйте тот же список с разными фильтрами, затем снимите их и повторите проверку.
Тщательно смотрите меню строк. Команды часто скрывают содержание строки, но всё ещё рендерят меню действий, чекбокс или контроль массового выбора для записей, которые пользователь не должен трогать. Такое несоответствие подсказывает пользователю, что что-то существует, а иногда даёт и действия, которых у него не должно быть.
Держите один и тот же чеклист для каждой страницы списка:
- число строк и сводные итоги
- результаты поиска и подсказки автозаполнения
- фильтры, порядок сортировки и пагинация
- меню строк, чекбоксы и массовые действия
- пустые состояния и сообщения "нет доступа"
Пустые состояния требуют дополнительной заботы. Некоторые приложения выдают больше в полезном сообщении, чем в таблице, с текстом вроде "У вас нет доступа к счётам Acme" или "1 скрытый результат совпал с вашим поиском." Это всё ещё раскрывает имена, аккаунты или цены.
Когда Oleg Sotnikov просматривает продукты стартапов, именно представления списков часто показывают первые реальные утечки. Они кажутся безобидными, потому что никто не открывал запись, но пользователь всё равно узнал то, чего не должен был.
Пробуйте экспорты, загрузки и массовые действия
Экспорты часто обходят обычный поток экрана. Пользователь может не открыть поле в приложении, а затем получить то же поле в CSV через секунду. Поэтому тесты прав в UI должны включать проверки экспортов со всех мест, откуда пользователь может их запустить, а не только из основного списка.
Начните с очевидных путей. Выполните экспорт со страницы списка, затем повторите с одиночной страницы записи, если продукт это позволяет. Часто эти действия подключены к разным эндпоинтам или разным сборщикам запросов, и один путь может протекать больше, чем другой.
Массовые действия вызывают особое подозрение. Возьмите смешанный набор записей: некоторые, которыми пользователь может управлять, некоторые — которые он может только просматривать, и некоторые — которые он не должен видеть вовсе. Затем попробуйте архивирование, удаление, назначение и экспорт. UI должен блокировать действие заранее или явно исключать заблокированные записи. Молчаливая частичная успешность опасна, если сообщение скрывает, что именно произошло.
Скачанный файл нужно проверять так же, как и экран. Откройте его и проверьте имя файла, заголовки колонок, число строк, итоги и соответствие содержимого видимым фильтрам. Скрытые поля иногда появляются в заголовках, даже если ячейки пусты. Утечка по числу строк всё ещё даёт пользователю реальную информацию.
Отменяйте и повторяйте тоже. Права часто устаревают, когда пользователь меняет роль в другой вкладке, теряет доступ после входа или возобновляет тайм-аут сессии. Запустите экспорт, отмените его, смените роль и запустите снова. Старые токены и кэшированные выборы выдают много данных в реальных продуктах.
Если экспорты выполняются в фоне, проверьте весь поток. Уведомление, тема письма, история заданий и сам завершённый файл — всё это нуждается в проверке. Пользователь не должен видеть "Экспорт завершён: 2 431 запись по зарплате", если он никогда не должен был знать о данном наборе данных.
Один маленький пример достаточно. Агент поддержки открывает список клиентов, выбирает десять аккаунтов и нажимает экспорт. Три из этих аккаунтов принадлежат другому региону. Самое безопасное поведение простое: приложение блокирует действие или экспортирует только семь разрешённых записей и ясно об этом сообщает.
Открывайте глубокие ссылки и сохранённые URL
Пользователи не всегда приходят через безопасный путь, который ожидает ваш UI. Они кликают старое письмо, открывают закладку страницы редактирования или вставляют URL из истории. Именно там проверки глубоких ссылок часто обнаруживают утечки, которые обычное тестирование по клику пропускает.
Используйте аккаунт с низкими правами и открывайте страницы, которые он никогда не должен редактировать. Сохранённый URL вроде /projects/482/edit — хороший тест. Затем подмените ID на проект из другой команды или аккаунта. Если страница загружает заголовок, имя владельца, число записей или старые значения формы до того, как появляется ошибка, вы уже имеете утечку.
Это важно даже когда бэкенд блокирует финальное сохранение. Пользователи всё ещё могут узнать, кто есть в системе, какие записи рядом и как устроено ваше приложение. В мультитенантных продуктах такая небольшая утечка часто достаточно, чтобы выдать имена клиентов, номера счетов или внутренние заметки.
Короткий набор для глубоких ссылок должен покрывать: сохранённые URL редактирования, админские и страницы настроек; ID, скопированные из другой рабочей области или аккаунта; ссылки из email-уведомлений; и параметры запроса вроде tab=, sort=, view= или export=.
Параметры запроса требуют отдельного внимания. Многие приложения скрывают дополнительные данные за вкладками вроде activity, billing или audit logs. Если переключение tab=security или tab=members показывает счётчики, заголовки таблиц или текст пустого состояния, экран говорит пользователю больше, чем должен.
Простое правило помогает: страница не должна раскрывать ничего чувствительного до подтверждения прав. Никакого имени записи в заголовке, никакого мелькания строк таблицы, без режима экспорта и без предзаполненных полей формы. Если доступ запрещён, показывайте нейтральное состояние ошибки первым и держите остальную часть экрана пустой.
Это один из самых дешёвых кейсов проверки контроля доступа, который можно добавить, и он быстро находит реальные проблемы.
Пройдите на простом примере
Роль агента поддержки часто кажется безопасной на демо. Агент может открыть экран Orders, читать детали заказа и помогать клиенту. Всё выглядит хорошо, пока вы не протестируете более узкие пути вокруг основного процесса.
Начните с очевидного правила: агент может просматривать заказы, но не может экспортировать email-адреса клиентов. На странице кнопка Экспорт скрыта, и экран выглядит корректно. Затем кто-то открывает сохранённый URL из истории браузера, и загрузка файла начинается всё равно. Это реальная утечка, даже если бэкенд блокирует другой путь экспорта.
Тот же экран может выдавать данные более тихими способами. Поле поиска может предлагать номера заказов, которые агент не должен видеть. Счётчик в списке может сообщать о закрытых записях, даже когда строки скрыты. Пользователи замечают такие детали быстро, и им не нужен админ-доступ, чтобы узнать что-то, что они не должны знать.
Меню также создаёт распространённую проблему. В меню строки может по-прежнему показываться Refund для агента поддержки. Когда он кликает, приложение выбрасывает ошибку или API отклоняет запрос. Это всё ещё баг прав: пользователь увидел действие, которое роль никогда не должна была видеть.
Преобразуйте каждую утечку в один маленький тест с конкретным ожидаемым результатом:
- Когда агент поддержки открывает страницу Orders, контрол Export не отображается.
- Когда тот же агент открывает сохранённый URL экспорта, приложение блокирует скачивание и не показывает файл.
- При вводе в поиск подсказки включают только разрешённые заказы.
- В меню строки пункт Refund отсутствует, а не отключён после клика.
Вот почему тесты прав в UI требуют больше, чем быстрые проверки видимых кнопок. Хороший тест проходит экран так, как это делает реальный пользователь: список, поиск, меню строки, сохранённый URL и путь экспорта. Именно так вы ловите утечки до того, как их заметят пользователи.
Ошибки, которые скрывают утечки прав
Команды часто тестируют два очевидных случая: полный админ и один базовый пользователь. Это пропускает «мутную середину», где обычно живут утечки. Агент поддержки, региональный менеджер, подрядчик или пользователь только для чтения в финансах могут обнаружить пробелы, которых простые тесты не касаются.
Скрытие кнопки — не тест в полном смысле. Многие страницы загружают данные до того, как кто-то нажмёт что-либо. Пользователь может никогда не увидеть кнопку Экспорт, но страница всё равно покажет приватные итоги, имена клиентов или подсказки поиска сразу после открытия.
Плохие тестовые данные усугубляют проблему. Если все записи принадлежат одной команде, плану или региону, экран выглядит корректным даже при неверном запросе. Намеренно смешивайте данные. Используйте две команды с похожими именами клиентов, несколько планов и пользователей из разных регионов — тогда утечку будет легче заметить.
Несколько привычек создают ложное чувство уверенности:
- проверка видимых контролов, но не данных, счётчиков и боковых панелей, которые загружаются при открытии страницы
- использование чистых демо-данных без пересечения между командами, планами или регионами
- тестирование только свежей сессии и отсутствие проверки кэшированной вкладки после выхода или смены роли
- принятие позднего 403 как прохождения теста, даже если UI уже показал приватные детали
Кэшированные экраны заслуживают больше внимания, чем получают. Если менеджер открыл страницу клиента, вышел и вошёл под слабой ролью, браузер может на мгновение показать старое содержимое. Этот краткий «всплеск» всё ещё утечка. То же самое для кнопки "Назад" в браузере, сохранённых вкладок и переключения ролей в одной сессии.
Поздние отказы — ещё одна ловушка. Если приложение загружает название отчёта, число записей, имена колонок или первые строки и только затем возвращает 403, пользователь уже узнал что-то. Считайте это провалом теста, а не частичным успехом.
Лучшие тесты немного жёсткие по отношению к приложению. Открывайте страницы напрямую, переключайте роли в середине сессии, ищите по смешанным данным и наблюдайте, что появляется до того, как приложение исправит ситуацию.
Быстрые проверки и дальнейшие шаги
Начните со страниц, которые показывают данные клиентов, биллинг, внутренние заметки или админские контролы. Именно там небольшая утечка в UI превращается в реальную проблему доверия. Скрытая кнопка не защитит пользователей, если сохранённый URL всё ещё открывается, поиск всё ещё возвращает результаты или экспорт всё ещё выполняется.
Хорошие UI-тесты прав соответствуют реальному поведению пользователей. Люди не только кликают через меню. Они используют закладки, историю браузера, общие ссылки, сохранённые фильтры и старые вкладки. Ваши проверки должны это учитывать.
Короткий прогон по каждому рискованному экрану работает хорошо:
- Проверьте, показывает ли меню экран роли, которой это положено.
- Откройте прямой URL в новой вкладке и посмотрите, что загрузится.
- Проверьте списки, счётчики, фильтры и результаты поиска на предмет записей, которые роль не должна видеть.
- Попробуйте экспорты, загрузки и массовые действия, даже если кнопки кажутся отключёнными.
- Повторите те же проверки на макетах, которые меняются между десктопом и мобильной версией.
Когда вы переключаете роли на одном устройстве, сначала очистите кэш состояния. Выйдите из системы, удалите сохранённые токены, сбросьте localStorage при необходимости и начните с чистой сессии. Старые данные могут заставить сломанный экран выглядеть безопасным, особенно если приложение хранит результаты списка или права в памяти.
Покрывайте утечки одну за другой. Если пользователь увидел скрытую колонку, добавьте тест для этой колонки. Если глубокая ссылка открыла страницу аккаунта, добавьте тест для сохранённого URL. Маленькие и конкретные кейсы контроля доступа легче поддерживать, чем огромный план, который никто не обновляет.
Простой порядок действий работает: сначала экраны с данными клиентов, затем поиск, потом экспорты. Один пропущенный CSV-скачанный файл может раскрыть больше, чем десять видимых кнопок.
Если вашей команде нужен внешний обзор, Oleg Sotnikov (oleg.is) работает со стартапами и небольшими командами в роли Fractional CTO и советника. Сфокусированный обзор рискованных экранов, экспортов и глубоких ссылок может дать вам ясный список исправлений и повторяемый способ поймать следующую утечку до того, как увидят пользователи.
Часто задаваемые вопросы
Что тесты прав в UI ловят, чего не хватает бэкенд-проверкам?
Бэкенд останавливает запрещённые действия. Тесты прав в UI фиксируют то, что пользователи всё ещё могут увидеть до этого блока — например имена, итоги, вкладки, кнопки и названия записей.
Достаточно ли скрытой кнопки, чтобы защитить страницу?
Нет. Скрытая кнопка закрывает только один путь. Пользователи используют закладки, историю браузера, общие ссылки и вставленные URL. Если экран рендерится сначала, утечка уже произошла.
Где чаще всего появляются утечки прав в UI?
Списки обычно текут первыми. Подсказки поиска, числа строк, сводки на дашборде, вкладки с ленивой загрузкой, панели предпросмотра и меню экспорта — всё это часто даёт утечки.
Как тестировать страницы списка и поиск?
Начните с аккаунта с минимальными правами. Откройте список, сравните видимые строки с числами и сводками, затем выполните поиск записей из другой команды или аккаунта. Потом измените фильтры, сортировку и страницы, чтобы проверить, появляются ли скрытые записи.
Что нужно проверять в экспортировании и массовых действиях?
Рассматривайте каждый путь экспорта как отдельную проверку безопасности. Запустите экспорт из представления списка и со страницы отдельной записи, затем откройте файл и проверьте колонки, число строк, итоги и скрытые поля. Загрузка должна соответствовать тому, что пользователь может видеть.
Как тестировать глубокие ссылки и сохранённые URL?
Вставьте прямые URL для страниц редактирования, админки, биллинга или настроек под ролью с низким доступом. Попробуйте ID записей из других команд тоже. Страница должна отказать в доступе до того, как покажет заголовок записи, хлебные крошки, поля формы или строки таблицы.
Нужна ли матрица прав перед тестированием?
Да. Короткая матрица помогает сосредоточиться. Соотнесите каждую роль со страницами, действиями, чувствительными полями и условиями вроде команды, плана, региона или аккаунта, чтобы не пропустить «мутные» случаи.
Какую роль стоит тестировать в первую очередь?
Начните с самой слабой роли, которая всё ещё может войти в систему. Админские аккаунты скрывают недоработки, потому что им доступно почти всё. Роль с правами только на чтение, подрядчик или младший сотрудник быстрее обнаружит реальные пробелы.
Означает ли ответ 403, что тест прав пройден?
Нет. Если страница показывает числа по зарплате, имена клиентов, счётчики или даже заголовок записи до ответа 403, тест провален. Пользовательу достаточно секунды, чтобы узнать что-то приватное.
С чего должна начать небольшая команда в тестировании прав в UI?
Начните с экранов, которые показывают данные клиентов, биллинг, внутренние заметки и админские элементы. Затем переходите к поиску, спискам, экспортам и глубоким ссылкам. Такой порядок быстрее обнаружит серьёзные утечки, не превращая работу в громоздкий проект.