Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Privacy Settings Bundle Laravel Package

symfinity/privacy-settings-bundle

A Symfony bundle for managing user privacy settings and consent preferences. Configure privacy options, persist choices, and integrate GDPR-style consent handling into forms, templates, and services with a simple, extensible API.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — domain yes, framework no. The package targets the right problem: a configurable consent-category registry, per-subject preference persistence, a permission-check API, and event hooks for reacting to consent changes. That is precisely the substrate a TPM needs to satisfy GDPR-style obligations without bespoke logic. The mismatch is at the framework seam, and it is decisive: -bundle, Doctrine-backed storage, and Twig helpers are Symfony idioms. A Laravel codebase has no service-provider auto-discovery, no illuminate/* contracts, no Eloquent models, and no Blade views here. Realistically, this package is leveragable in three ways ranked by cost: (1) as a reference specification for our consent taxonomy, record shape, and event model — near-zero cost, immediate value; (2) as a forked core where we keep the category/decision logic and replace Doctrine with Eloquent and Twig with Blade; (3) as a drop-in dependency — not viable on a Laravel stack without an adapter we own. MIT licensing makes (1) and (2) legally clean, which is the main reason this package is still worth a TPM's time.

Integration feasibility. Composer install itself is trivial; everything after it is ours. Confirm whether composer.json pulls symfony/framework-bundle and doctrine/orm as hard requirements — if so, adopting this introduces a second persistence abstraction and a Twig runtime into an application that has neither, which is an architectural cost far larger than the consent feature itself. There is no publishable Laravel migration, no config file to vendor:publish, no facade. Budget 2–4 engineer-weeks for a faithful Laravel port versus 2–3 days if a Laravel-native equivalent existed.

Technical risk.

  • Pre-1.0 at v0.2.3. Semver permits breaking changes on minor bumps. Treat 0.2.x → 0.3.0 as a potential breaking upgrade and pin exactly.
  • Opaque release notes. v0.2.3 (2026-07-05) is a patch whose notes are a bare link to CHANGELOG.md with no inline summary. We cannot distinguish a docs fix from a consent-evaluation fix. For a control that gates regulatory behaviour, that is a supply-chain transparency gap.
  • Bus factor. Zero stars and a single-namespace publisher means no community, no vendor SLA, no evidenced security-disclosure process, no LTS branch. If we fork, we become the maintainer — that is the default outcome, not a contingency.
  • Regulatory blast radius. A bug here produces an unlawful-processing or invalid-consent event, not a broken page. Risk tolerance must be set by legal/privacy, not by code review alone.

Key questions.

  1. What does composer.json actually require — symfony/framework-bundle and doctrine/orm, or only symfony/* contracts? Any illuminate/* support at all?
  2. What precisely changed in v0.2.3? Obtain the CHANGELOG.md body and the commit diff before any approval.
  3. What is the PHP and Symfony support range, and is it consistent with a fork we must maintain for 24+ months?
  4. Is consent state stored in a table we can join to our users, and can it be exported per-subject for DSAR fulfilment and audit?
  5. What is the behaviour when consent evaluation throws, times out, or the record is missing — fail-open (granted) or fail-closed (denied)? Fail-open is disqualifying in our context.
  6. Does the record model support consent versioning — category text changes, re-consent prompts, effective-dated policy versions? A consent registry without versioning ages badly under audit.
  7. Are the event hooks rich enough to drive an immutable audit log (who, what, when, prior value, policy version)?
  8. Test coverage, CI posture, and a published security contact?

Integration Approach

Stack fit — pick the leverage point deliberately. Recommend treating this as a specification plus selectively forked core, not as a dependency. Concretely: adopt the category/purpose taxonomy, the consent-record shape (subject, category, state, timestamp, policy version, source), and the event-driven change hooks as our design; implement storage in Eloquent and UI in Blade ourselves. This captures roughly 80% of the package's value at near-zero framework risk, and leaves the compliance-critical evaluation semantics as our own reviewed code. Run a parallel evaluation of Laravel-native consent packages and a commercial CMP; if one clears the fail-closed and audit-export tests, it wins on total cost of ownership despite licence fees.

Migration path. Consent data is stateful, audited, and legally load-bearing — plan coexistence, never cutover.

  1. Inventory current capture: banner implementation, existing preference table, any vendor CMP, and any implicit "continue browsing = consent" assumptions that must be retired.
  2. Map the package's record shape onto existing records; define an explicit unknown/legacy state so historical users are never silently reclassified as opted in.
  3. Backfill one-way, then run shadow-reads (new evaluator consulted, legacy still authoritative) for one release and diff the decisions.
  4. Flip the flag; retain the legacy path read-only for one release cycle for rollback.

Compatibility. Validate the PHP range against our supported matrix and our next-hop upgrade. Check doctrine/dbal and symfony/* version constraints for conflicts if we fork, and confirm nothing pins a major that blocks our Laravel upgrade runway. If we do not fork, verify the package is on Packagist (not VCS-only) so it survives our artifact mirroring.

Sequencing.

  1. Spike, 2 days: read composer.json, read the v0.2.3 diff, answer the fail-open question with a deliberate exception-injection test, and write the one-page fork-vs-build-vs-buy recommendation.
  2. Decision gate: privacy/legal sign-off on default-deny semantics and the unknown state before any code is committed.
  3. Build (2–3 sprints): Eloquent model + migration, policy-versioned category config, evaluation service behind our own ConsentService interface, Blade components, audit-log listener.
  4. Pilot: one low-regulatory-exposure surface; instrument grant/deny rates and evaluation latency.
  5. Rollout: feature-flagged, with DSAR export verified end-to-end and a rehearsed rollback.

Operational Impact

Maintenance. If we fork, we own the code outright and upstream sync becomes a per-release diff review with diminishing returns — plan to stop tracking upstream after the initial port and treat our version as the system of record. Even in the reference-only path, budget recurring review time for the consent taxonomy as regulations and marketing tooling shift. This is not a set-and-forget library in either scenario.

Support. Assume community-only and effectively no community: zero stars means no issue triage, no backport policy, no guaranteed CVE response, and no escalation path beyond an upstream queue of unknown responsiveness. Mitigate structurally — wrap everything behind our own consent interface so the implementation is replaceable without touching call sites, and write down the replacement plan now rather than during an incident.

Scaling. Writes are negligible (preference changes are rare). Reads are the concern: consent checks are per-request and per-category, so a naive implementation issues several queries per page view, and Doctrine-style entity hydration is heavier than a simple model load. Request-scoped memoisation is mandatory; a short-TTL cache is advisable. Cache invalidation is the sharp edge — a user revoking consent must not be served a cached grant, so revocations must bust the cache synchronously while grants may be cached.

Failure modes.

  • Evaluation throws or times out → must degrade to "denied," never "granted." Verify with an injected-failure test, not by reading the code.
  • Stale cached grant after revocation → the highest-likelihood compliance incident; enforce synchronous invalidation on write.
  • Category or schema change mid-upgrade → historical records become unreadable or unclassifiable; require policy versioning on every record and a read-only legacy path.
  • Unpinned minor bump → silent behaviour change on a compliance control; pin exactly, upgrade deliberately, re-run the fail-closed test on every bump.
  • Abandonment → expected rather than exceptional; replaceability is a design requirement.
  • Double persistence stack (if adopted wholesale) → Doctrine plus Eloquent in one application, doubling migration, backup, and onboarding burden for a single feature.

Ramp-up. Reading the package is quick for anyone comfortable with Symfony bundle conventions, but that is not our team's baseline — expect a skills tax in Doctrine mapping and bundle extension config. Realistic estimate: ~2 days to assess and decide, ~2–4 weeks to port and test behind our interface, plus ~3–5 days of privacy-adjacent review (fail-closed semantics, audit trail completeness, DSAR export, re-consent flow) before it can touch production traffic. At least one non-engineering reviewer — legal or privacy — must sign off on default-deny behaviour; that sign-off is a gate, not a checkbox.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager