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

Users Security Bundle Laravel Package

smartassert/users-security-bundle

Symfony bundle for adding user security to your application, offering a foundation for authentication, user management, and related security services. It provides reusable components and integration points to implement protected user flows with less boilerplate and configuration.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Release 12.0 confirms the core finding rather than changing it: this is a Symfony bundle, and its trajectory is deeper Symfony coupling, not broader portability. The sole change in the release is a constraint bump to Symfony 8.0 — no framework-agnostic refactor, no documented non-Symfony consumption path, no Laravel-facing work of any kind. The reusable asset for a Laravel target remains the underlying smartassert/user-security domain library, not this wrapper. Treat the evaluation as two separate decisions: adopt the domain library (still plausible) versus adopt the bundle (only if the target is Symfony 8).

Integration feasibility. Unchanged in shape, but narrower in the Symfony scenario. The plain-Composer path — pull the domain package, write thin Laravel adapters (Eloquent user lookup, hasher implementation, custom guard, token middleware) — is now the only viable route for a Laravel consumer, and 12.0 offers no evidence the maintainer intends to make the bundle itself consumable outside Symfony. On the Symfony side, integration remains routine for anyone on Symfony 8: register in bundles.php, configure under config/packages/, wire the user provider into security.yaml. The bundle wrapper should still be assumed non-portable until proven otherwise; this release is a data point against, not for.

Technical risk. Still high, with one risk retired and two sharpened.

  • Retired: release authenticity. Two consecutive tagged releases (11.1, 12.0) with a traceable PR reference indicate genuine, automated release hygiene — this is a real release train, not a monorepo-split artifact.
  • Sharpened — version coupling. Symfony 8.0 is a new major. Adopting it this promptly means the bundle tracks Symfony's release train rather than the LTS line. Consequences: a PHP floor of 8.4 (Symfony 8's requirement) now propagates to every consumer of 12.x, and consumers on Symfony 6.4 LTS — supported upstream until late 2027 — are stranded on 11.x, which may or may not continue receiving fixes. Confirm the branch policy explicitly.
  • Sharpened — ecosystem isolation. A two-star package with zero dependents now also requires a cutting-edge PHP and Symfony major. That further shrinks the pool of anyone who has run this in production, which means no informal bug reports, no compatibility folklore, and no security-advisory surface. Auth is a security-critical path; you are the auditor.
  • Unchanged: auth code may be optimized for the parent project's testing-oriented usage; Symfony security APIs churn across majors, and firewall-factory code is where that churn bites.

Key questions to resolve before commitment.

  • Does 12.0 drop Symfony 6.4/7.x entirely, or is support split across maintained branches? What is the backport/security-fix policy for 11.x?
  • Does the PHP 8.4 floor come from symfony/framework-bundle 8.0 specifically, or does the underlying smartassert/* domain package also require 8.4? The latter would kill the Laravel adapter path for anyone below PHP 8.4.
  • Does composer.json require symfony/framework-bundle, or only decoupled symfony/* components?
  • Is the domain layer free of Symfony contracts (UserInterface, PasswordAuthenticatedUserInterface, event dispatchers)?
  • What exactly does the bundle register — services, parameters, compiler passes, firewall factories?
  • Test coverage, static analysis level, and CI matrix breadth (which PHP/Symfony combinations are actually exercised)?
  • Is there any documented non-Symfony consumption path, or must consumers reverse-engineer it?
  • Maintenance model: single maintainer with fast major-version adoption — is there willingness to accept patches for a Laravel adapter, and what is the response time on issues?
  • Does it implement hashing itself or delegate to PHP's native password_* functions?

Integration Approach

Stack fit. Assume PHP 8.x, PSR-4 autoloading, and PSR-11 containers on both sides. Laravel can consume the domain library directly; it cannot consume Symfony DI service definitions without loading the Symfony container, which is not a trade worth making — and 12.0 makes that container heavier, not lighter. The integration unit stays a small first-party adapter package, versioned internally, exposing a stable interface to the rest of the application.

Compatibility verification. This release materially advances this step: the Symfony 8 constraint is now known, and the PHP 8.4 floor should be treated as the working assumption until composer.json is read. Verify explicitly whether the domain package — installable independently of the bundle — carries the same PHP 8.4 requirement. It very likely does not, but if the smartassert family was bumped in lockstep, the Laravel path collapses for teams on PHP 8.2/8.3 (Laravel 10, and Laravel 11/12 installations still on older runtimes). Laravel-version support is still unclaimed anywhere; that remains an assumption to validate by execution.

Migration path. Substantively unchanged, with one addition. Keep the library's domain objects at the boundary and map them to Eloquent models rather than letting them leak into controllers, policies, and Blade views: an Eloquent repository implementing the library's user-lookup interface; a password hasher adapter delegating to Laravel's Hash facade or wrapping the library's hasher with rehash-on-login; a custom guard or Auth::viaRequest for token flows; middleware for transport-level checks. Run the adapter in parallel behind a feature flag during migration and compare authentication outcomes before cutover — hash-format mismatches surface as failed logins, not exceptions. Added for 12.0: pin the domain package to an exact version in the adapter's composer.json. A maintainer who moves to a framework major within days of its release will move again; an exact pin plus a scheduled review is the only cheap defence.

Sequencing.

  1. Source and constraint audit — read composer.json on both the bundle and the domain package; a few hours beats a week of guessing.
  2. Re-baseline the build-versus-buy decision against Laravel's native stack (Sanctum, Fortify, Breeze). 12.0 adds no capability that changes this calculus; if anything, the PHP 8.4 floor and Symfony-only framing weaken the package's case for a Laravel target.
  3. Spike: authenticate one user end-to-end in a throwaway Laravel app, including password verification and token issuance, on your actual PHP version.
  4. If proceeding, wrap in an internal package with a narrow public interface, a semver contract, and an exact upstream pin.
  5. Integrate, then add contract tests pinning hash output and token behaviour so upstream drift fails loudly.

Operational Impact

Maintenance. You still own the adapter and, in practice, likely the fork — and 12.0 demonstrates the specific mechanism by which that becomes necessary. A maintainer who adopts a brand-new framework major immediately will, by the same instinct, drop older branches on a schedule you do not control. With no dependents, no external pressure forces compatibility with your PHP or framework version; that work lands on your team. Budget recurring effort for PHP minors, Symfony/Laravel majors, and periodic security review of the auth path. Fork or vendor early, and consider pinning to the last release whose constraints match your runtime rather than chasing the newest tag.

Support. Still no community corpus: no Stack Overflow history, no tutorials, no advisory feed you would reliably notice. The fast major-version turnover reduces the chance that any public discussion matches your version. Support is the maintainer's direct replies plus your team's reading of the source. Confirm responsiveness on the 11.x branch specifically if you are pinned there — abandoned old branches are a worse failure mode than an abandoned project, because the code still installs.

Scaling. Unchanged: authentication is rarely the throughput bottleneck; hashing cost is the meaningful knob and should be a configuration value you control, not a library default. Token issuance and lookup patterns matter more than the package — verify no per-request full-table scans or in-memory user stores that break under horizontal scaling. Session and token state must live in shared storage across instances. One addition: if you are forced onto a newer PHP to satisfy upstream constraints, validate hashing performance on the new runtime before cutover, since password_* cost calibration is runtime-sensitive.

Failure modes to design against.

  • Constraint-driven forced upgrade — a dependency bump requiring PHP 8.4 or a framework major, arriving as a routine release rather than a planned migration. Mitigate with exact pins and a deliberate upgrade cadence.
  • Silent abandonment of an older branch — you remain on 11.x and stop receiving fixes without any announcement.
  • Silent hash-parameter or format drift breaking logins after a dependency update.
  • DI wiring that fails only at container boot in a specific environment.
  • Security regressions in auth flows with no CVE coverage to warn you.
  • Hidden coupling to Symfony HTTP kernel assumptions (request/response, session) that behave differently under Laravel middleware ordering.

Ramp-up. The API surface is small, so a competent PHP engineer can be productive in days; the cost is that there are no docs, so onboarding means reading source. Estimate a two-to-three day spike and one to two weeks to production hardening including the adapter, tests, and the fork/vendor contingency — plus a standing half-day per upstream major release for constraint triage. For a team without spare capacity to own an auth adapter, the correct recommendation is unchanged and now firmer: decline and use the first-party Laravel stack. The opportunity score remains high because the niche is uncrowded, not because demand or maturity has been demonstrated — and release 12.0 confirms the package is being built for its maintainer's Symfony-8 roadmap, not for general adoption.

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.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route