Реалізація керування згодами на обробку даних на сайті
Уявіть: ваш сайт обробляє дані 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-2 дні.
- Проектування схеми бази даних — 1 день.
- Розробка сервісу та API — 2-3 дні.
- Інтеграція з фронтендом — 2-3 дні.
- Тестування та аудит — 1-2 дні.
- Деплой та документація — 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-рішень.
Не відкладайте безпеку на потім. Замовте впровадження системи керування згодами під ключ вже сьогодні.







