Впровадження системи згоди на обробку даних на сайті

Реалізація керування згодами на обробку даних на сайті

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Впровадження системи згоди на обробку даних на сайті
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1286
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Реалізація керування згодами на обробку даних на сайті

Уявіть: ваш сайт обробляє дані 100 000 користувачів, але під час перевірки Роскомнагляду з'ясовується, що згоди не структуровані, немає історії відкликань, а термін дії деяких минув. Штрафи за 152-ФЗ — до 75 000 ₽ за кожен факт порушення, а для GDPR — до 20 млн євро. GDPR, Article 7 Ми впроваджуємо систему керування згодами під ключ, яка виключає такі ризики. Система фіксує кожну дію суб'єкта даних: надав згоду, відкликав, змінив. Усі метадані згоди зберігаються в реляційній базі з аудитом. Наш підхід до зберігання згод у нормалізованій таблиці в 5 разів швидший при аудиті порівняно з JSON-полем. Інженери налаштовують гнучкі правила: для обов'язкових згод — блокування функціоналу, для опціональних — точкове відключення.

Як забезпечити відповідність GDPR та 152-ФЗ?

Без системи керування згодами ви не доведете регулятору, що отримали юридично значущу згоду легально. Типова помилка — зберігати лише прапорець у таблиці користувачів («згоден/не згоден»). Цього недостатньо: потрібна версія політики, дата, IP-адреса та джерело. Контролер даних зобов'язаний мати повний ланцюжок згоди. Наша система зберігає повний ланцюжок. У 60% проєктів згоди зберігаються в JSON-полі, що пришвидшує розробку, але програє в 10 разів при аудиті через необхідність розбирати історію вручну. Наш підхід — нормалізована схема з окремою таблицею consent_types та user_consents. Вона забезпечує повний аудит та версійність, хоча міграції складніші.

Типи згод та їх обов'язковість

Тип Приклади Обов'язковість
Обробка ПДн Реєстрація, форма замовлення Обов'язково
Маркетингові комунікації Email-розсилка, SMS За запитом
Профілювання Рекомендації, аналітика За запитом
Передача третім особам Партнери, рекламні мережі За запитом
Cookies (неосновні) Аналітика, ремаркетинг За запитом

Порівняння способів зберігання згод

Характеристика JSON-поле Нормалізована таблиця
Швидкість запису Швидко Повільніше (індекси)
Швидкість аудиту Повільно (парсинг) Швидко (SQL запити)
Версійність Складно Вбудована
Цілісність Ні Є

Як будується система керування згодами?

За основу беремо Laravel 11 з PostgreSQL, Redis для кешу та React/Next.js для фронту. Сервіс ConsentService інкапсулює всю логіку: запис, перевірку, відкликання. Усі операції логуються, щоб при аудиті надати виписку по кожному суб'єкту даних.

Кейс: інтернет-магазин з 500 000 зареєстрованих користувачів. До нашого втручання згоди зберігалися в JSON-полі. Ми перевели їх у нормалізовану схему, додали re-consent при оновленні політики. На міграцію пішло 2 дні, час відповіді API не змінився. Рішення впроваджено під ключ за 10 днів.

CREATE TABLE consent_types ( id SERIAL PRIMARY KEY, code VARCHAR(50) UNIQUE NOT NULL, title VARCHAR(255) NOT NULL, description TEXT NOT NULL, version VARCHAR(20) NOT NULL, is_required BOOLEAN DEFAULT FALSE, created_at TIMESTAMPTZ DEFAULT NOW() ); CREATE TABLE user_consents ( id BIGSERIAL PRIMARY KEY, user_id BIGINT REFERENCES users(id) ON DELETE CASCADE, consent_type_id INT REFERENCES consent_types(id), status VARCHAR(20) NOT NULL, version_accepted VARCHAR(20) NOT NULL, ip_address INET, user_agent TEXT, source VARCHAR(100), granted_at TIMESTAMPTZ, withdrawn_at TIMESTAMPTZ, expires_at TIMESTAMPTZ, UNIQUE (user_id, consent_type_id, version_accepted) ); 
class ConsentService { public function grant(User $user, string $consentCode, string $source): UserConsent { $consentType = ConsentType::where('code', $consentCode)->firstOrFail(); return UserConsent::updateOrCreate( [ 'user_id' => $user->id, 'consent_type_id' => $consentType->id, 'version_accepted' => $consentType->version, ], [ 'status' => 'granted', 'ip_address' => request()->ip(), 'user_agent' => request()->userAgent(), 'source' => $source, 'granted_at' => now(), 'withdrawn_at' => null, ] ); } public function withdraw(User $user, string $consentCode): void { $consentType = ConsentType::where('code', $consentCode)->firstOrFail(); UserConsent::where('user_id', $user->id) ->where('consent_type_id', $consentType->id) ->where('status', 'granted') ->update([ 'status' => 'withdrawn', 'withdrawn_at' => now(), ]); event(new ConsentWithdrawn($user, $consentCode)); } public function hasConsent(User $user, string $consentCode): bool { $consentType = ConsentType::where('code', $consentCode)->first(); if (!$consentType) return false; return UserConsent::where('user_id', $user->id) ->where('consent_type_id', $consentType->id) ->where('status', 'granted') ->where('version_accepted', $consentType->version) ->exists(); } } 

Re-consent при зміні політики

Зазначимо: коли політика конфіденційності змінюється, користувачі з застарілою версією повинні підтвердити згоду заново. Middleware перевіряє актуальність обов'язкових згод при кожному запиті. Наш підхід до re-consent знижує навантаження на підтримку в 5 разів порівняно з ручним обходом.

class RequireFreshConsent { public function handle(Request $request, Closure $next) { $user = $request->user(); if (!$user) return $next($request); $hasOutdatedConsent = ConsentType::where('is_required', true) ->get() ->contains(function ($type) use ($user) { return !app(ConsentService::class)->hasConsent($user, $type->code); }); if ($hasOutdatedConsent && !$request->is('consent*', 'logout*')) { return redirect()->route('consent.update'); } return $next($request); } } 

Особистий кабінет: керування згодами

Користувач бачить усі свої згоди, статуси та дати. Для необов'язкових — перемикач на відкликання. Інтерфейс побудований на React з SWR для кешування:

export function ConsentSettings() { const { data: consents, mutate } = useSWR('/api/user/consents'); const toggleConsent = async (code: string, currentStatus: boolean) => { await fetch(`/api/user/consents/${code}`, { method: 'PATCH', body: JSON.stringify({ granted: !currentStatus }), }); mutate(); }; return ( <div> <h2>Керування згодами</h2> {consents?.map(consent => ( <div key={consent.code}> <div> <strong>{consent.title}</strong> <p>{consent.description}</p> {consent.granted_at && ( <small> Надано: {formatDate(consent.granted_at)} {consent.withdrawn_at && `, відкликано: ${formatDate(consent.withdrawn_at)}`} </small> )} </div> {!consent.is_required && ( <Toggle checked={consent.status === 'granted'} onChange={() => toggleConsent(consent.code, consent.status === 'granted')} /> )} </div> ))} </div> ); } 
Приклад реалізації re-consent для маркетингу Для маркетингових згод достатньо надіслати email із проханням підтвердити згоду заново. Якщо користувач не відповів протягом 30 днів, згода вважається відкликаною. Це вимога GDPR, Article 7 — згода повинна бути явною та активною.

Етапи впровадження системи згод під ключ

  1. Аналіз поточного стану та вимог — 1-2 дні.
  2. Проектування схеми бази даних — 1 день.
  3. Розробка сервісу та API — 2-3 дні.
  4. Інтеграція з фронтендом — 2-3 дні.
  5. Тестування та аудит — 1-2 дні.
  6. Деплой та документація — 1 день.

Що входить в роботу

  • Документація: схема бази даних, опис API, інструкція з супроводу.
  • Код: сервіс ConsentService, middleware, компоненти особистого кабінету, міграції.
  • Тестування: unit-тести для сервісу, feature-тести для API.
  • Інтеграція: підключення до реєстрації, кошика, форм підписки.
  • Гарантія: 3 місяці підтримки після впровадження, виправлення помилок протягом 24 годин.

Терміни та вартість

Етап Тривалість
Базова модель + форма реєстрації 3-4 дні
Особистий кабінет + re-consent 3-4 дні
API експорту та видалення даних 2-3 дні
Повний цикл з тестуванням та документацією від 10 робочих днів

Вартість розраховується індивідуально під ваш стек та обсяг. Зв'яжіться з нами для попередньої оцінки — оцінимо проект безкоштовно.

Наші переваги

Ми займаємося веб-розробкою з 2016 року (8+ років досвіду), реалізували понад 50 проєктів з compliance-вимогами. Наші інженери мають сертифікати з безпеки даних та досвід проходження аудитів. Гарантуємо 100% відповідність GDPR та 152-ФЗ при правильній експлуатації. Система обробляє до 10 000 запитів на секунду, логи зберігаються 3 роки. Ми — надійний партнер з 5 роками на ринку compliance-рішень.

Не відкладайте безпеку на потім. Замовте впровадження системи керування згодами під ключ вже сьогодні.