Разработка портала для государственной организации
Государственные порталы — отдельная категория по требованиям. Закон об обеспечении доступа к информации о деятельности государственных органов, требования к доступности (WCAG 2.1, уровень AA как минимум), интеграция с государственными сервисами идентификации, строгие требования к хранению персональных данных. Это не корпоративный сайт с формой обратной связи — здесь другой уровень ответственности за реализацию.
Законодательная база
В Беларуси: Закон «Об электронном документе и электронной цифровой подписи», требования постановлений Совета Министров о государственных информационных ресурсах. В России: ФЗ-149 «Об информации», ФЗ-152 «О персональных данных», постановления Правительства о требованиях к официальным сайтам органов власти.
Перечень обязательных разделов для российских госорганов зафиксирован в постановлении Правительства РФ № 477 от 2010 года и его последующих редакциях: сведения об органе, нормативные документы, государственные услуги, результаты проверок, антикоррупционные материалы.
Доступность: WCAG 2.1 AA обязательно
Это не рекомендация, а требование. ГОСТ Р 52872-2019 в России напрямую ссылается на WCAG. Проверка проводится автоматически (axe-core, Lighthouse) и вручную.
Типичные проблемы, которые всплывают при аудите:
<!-- Неправильно: форма поиска без label -->
<input type="search" placeholder="Поиск по сайту">
<!-- Правильно -->
<label for="site-search" class="sr-only">Поиск по сайту</label>
<input id="site-search" type="search" placeholder="Поиск по сайту"
role="searchbox" aria-label="Поиск по сайту">
<!-- Неправильно: таблица без заголовков -->
<table>
<tr><td>Иванов И.И.</td><td>Начальник отдела</td><td>+375 17 000-00-00</td></tr>
</table>
<!-- Правильно: заголовки scope -->
<table>
<caption>Контакты руководства</caption>
<thead>
<tr>
<th scope="col">ФИО</th>
<th scope="col">Должность</th>
<th scope="col">Телефон</th>
</tr>
</thead>
<tbody>
<tr>
<td>Иванов Иван Иванович</td>
<td>Начальник отдела</td>
<td><a href="tel:+375170000000">+375 17 000-00-00</a></td>
</tr>
</tbody>
</table>
Все PDF-документы, размещённые на портале, также должны быть доступны — tagged PDF с логической структурой, alt-текстами для изображений внутри документа. Это отдельная работа при наличии большого архива.
Аутентификация через госсервисы
Для порталов с личным кабинетом гражданина обязательна интеграция с государственной системой идентификации. В Беларуси — ЕСИА (единая система идентификации и аутентификации) или ID-карта. В России — Gosuslugi (portal.gosuslugi.ru) через SAML 2.0 или OpenID Connect.
Пример подключения ЕСИА через OAuth 2.0 (упрощённая схема):
// Laravel: редирект на авторизацию через ЕСИА
public function redirectToEsia()
{
$params = [
'client_id' => config('esia.client_id'),
'response_type' => 'code',
'scope' => 'openid fullname email mobile snils',
'redirect_uri' => route('esia.callback'),
'state' => csrf_token(),
'timestamp' => now()->format('Y.m.d H:i:s O'),
'access_type' => 'online',
];
// Подпись запроса через PKCS#7 (обязательно для ЕСИА)
$params['client_secret'] = $this->signRequest($params);
return redirect(config('esia.auth_url') . '?' . http_build_query($params));
}
ЕСИА требует подписи запросов через квалифицированный сертификат — это отдельная инфраструктура, которую нужно получать в удостоверяющем центре.
Персональные данные и хранение
ФЗ-152 (Россия) и аналогичные законы требуют хранения персональных данных граждан на серверах в стране. Это влияет на выбор хостинга — только российские или белорусские датацентры для соответствующих проектов.
# Обязательные заголовки безопасности для госпортала
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-{NONCE}'; style-src 'self' 'unsafe-inline'" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
Поиск по документам
Государственные порталы накапливают тысячи нормативных документов. Простой поиск по БД не справляется — нужен полнотекстовый поиск с учётом морфологии русского языка.
Elasticsearch с плагином analysis-morphology или PostgreSQL с конфигурацией для русского:
-- PostgreSQL: полнотекстовый поиск с русской морфологией
CREATE INDEX docs_fts_idx ON documents
USING GIN (to_tsvector('russian', title || ' ' || content));
SELECT id, title,
ts_rank(to_tsvector('russian', title || ' ' || content), query) AS rank
FROM documents, to_tsquery('russian', 'приватизация & жилье') query
WHERE to_tsvector('russian', title || ' ' || content) @@ query
ORDER BY rank DESC
LIMIT 20;
Для очень больших архивов (>100k документов) — Elasticsearch с настроенным анализатором:
{
"settings": {
"analysis": {
"analyzer": {
"russian_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "russian_stop", "russian_morphology"]
}
}
}
}
}
Версионирование и архив
Нормативные документы должны сохраняться с историей редакций. Пользователь должен видеть текущую редакцию и иметь доступ к предыдущим. Реализуется через таблицу ревизий:
CREATE TABLE document_revisions (
id BIGSERIAL PRIMARY KEY,
document_id BIGINT REFERENCES documents(id),
content TEXT NOT NULL,
revision_note TEXT,
created_by BIGINT REFERENCES users(id),
created_at TIMESTAMPTZ DEFAULT NOW(),
effective_from DATE,
effective_to DATE
);
Многоязычность
Для организаций, работающих с национальными меньшинствами или международными партнёрами, портал должен поддерживать несколько языков. hreflang в head, отдельные URL по языку (/ru/, /be/, /en/), localStorage для сохранения предпочтения.
Производительность и SLA
Государственные порталы обязаны соблюдать SLA по доступности — как правило, 99.5% или выше. Это означает:
- резервирование на уровне инфраструктуры (несколько серверов за балансировщиком)
- мониторинг uptime с алертингом
- регламент реагирования на инциденты
Типичная схема: nginx как reverse proxy + балансировщик, два application-сервера active-active, PostgreSQL с репликой, Redis для кеширования сессий.
Сроки
Информационный портал с документальным архивом и поиском — 6–10 недель. С интеграцией ЕСИА/Госуслуг и личным кабинетом гражданина — 3–5 месяцев. Полноценная платформа госуслуг с приёмом заявлений, статусом обращений и электронной подписью — отдельный проект на 6+ месяцев с участием юристов и специалистов по информационной безопасности.







