Granular consent preferences supported
Why it matters
GDPR Recital 43 and Article 7 require that consent be specific — a contact agreeing to order confirmations has not agreed to promotional campaigns. ePrivacy Article 5(3) separately governs marketing communications, requiring its own specific consent. CCPA §1798.120 gives consumers the right to opt out of specific categories of data sale and sharing. A single subscribed flag collapses distinct legal bases into one undifferentiated bucket, making it impossible to honor scoped opt-outs without silencing the contact entirely. When a contact withdraws consent for marketing but not transactional emails, a system with no scope differentiation either keeps sending marketing or breaks transactional delivery.
Severity rationale
High because conflating consent scopes violates GDPR Art. 7's specificity requirement and forces a binary all-or-nothing opt-out that breaks transactional email when a contact opts out of marketing.
Remediation
Add a scope parameter to every consent query and enforce it at send time. Update your consent lookup function to check the exact scope before sending any campaign:
async function hasConsent(
contactId: string,
scope: 'marketing' | 'transactional' | 'partner'
): Promise<boolean> {
const latest = await db
.selectFrom('consent_records')
.select('granted')
.where('contact_id', '=', contactId)
.where('scope', '=', scope)
.orderBy('created_at', 'desc')
.limit(1)
.executeTakeFirst()
return latest?.granted === true
}
Every campaign send path must call hasConsent(contactId, scope) with the specific scope for that campaign type — never check a global subscribed flag as a substitute.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Compliance & Consent Engine Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- gdpr · Art. 7 — Conditions for consent — granularity requirement
- eprivacy · Art. 5(3) — Confidentiality — prior consent for cookies/tracking
- ccpa · §1798.120 — Right to opt-out of sale
- gdpr · Recital 43 — Consent should be granular per purpose
Taxons
History
- 2026-04-18·v1.0.0·Initial import from compliance-consent-engine·automated