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

Acl Bundle Laravel Package

project-a/acl-bundle

ACL bundle for Project A that adds role- and permission-based access control. Define roles, assign permissions, and protect routes and resources through configuration, with simple checks for authorization throughout your application.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Release review (v1.1.0) — real but immaterial to the decision. Three changes: a bug fix to class permission evaluation, and two conveniences allowing ObjectIdentity instances and class names to be supplied directly rather than constructed by the bundle. All three are Symfony-domain changes. None introduces a Laravel service provider, facade, config surface, or Eloquent integration; none addresses PHP 8, modern Doctrine, or the abandonment of symfony/security-acl. The release also corrects two claims in the prior assessment: the project is not fully archived — there is an active, if very low-cadence, maintainer — and "no upstream fixes" is no longer accurate. That is a genuine improvement in the maintenance picture, and it does not change the recommendation.

Architecture fit — poor, and the framing still needs correcting. project-a/acl-bundle is a Symfony bundle wrapping the Symfony Security ACL component. It does not target Laravel. Any Laravel adoption remains a porting exercise, not an installation exercise.

The underlying platform is the binding constraint, not the wrapper. Symfony's ACL component was deprecated in 3.4 and removed from core in 4.0, surviving only as the separately published symfony/security-acl package, which is itself abandoned. A v1.1.0 release is a maintainer patching a thin convenience layer over a component that no longer exists in supported Symfony versions. The wrapper can be fixed; the foundation cannot.

Integration feasibility — low, unchanged. The package's value is convenience wrappers around ACL primitives: object identities, security identities, mutable ACLs, permission grants. v1.1.0 marginally reduces construction boilerplate for those primitives. In Laravel there is still no host: no security token storage, no ACL provider, no MutableAclProvider in the container. Reproducing them means either bootstrapping a slice of the Symfony security stack inside Laravel, or reimplementing the semantics on Laravel's Gate/Policy system — at which point the package contributes conceptual inspiration only.

Technical risk — severe, though marginally revised.

  • Sporadic single-maintainer maintenance over an abandoned foundation. Better than archived, but there is no release cadence, no published support window, no security advisory process, and no evidence of a second maintainer. A ten-year gap followed by a patch release is a continuity signal, not a support commitment.
  • The 1.1.0 fix is itself a risk data point. A class-permission evaluation bug shipped and was corrected with no advisory, no CVE, and no upgrade guidance. In an authorization library that is a security-relevant defect class. It confirms the "silent authorization drift" failure mode is real rather than theoretical — and confirms that fixes arrive without a disclosure channel you can subscribe to.
  • Zero adoption signal. Small star count and no meaningful dependent base means no battle-testing, no community corpus, no one to ask when behavior surprises you. A patch release does not change this.
  • Composer resolution failure remains the expected outcome on PHP 8.x with modern Doctrine/Symfony constraints. Constraint aliasing produces a permanently unsupportable branch.
  • ACL model complexity remains the real hazard. The object-identity × security-identity × permission matrix has well-known performance and correctness pitfalls (batch preloading, inheritance, masking) that are normally learned from an active community. There still isn't one.

Key questions before any further work:

  1. Is the actual requirement a legacy Symfony 2.x/3.x application already depending on this bundle? If so, the conversation is containment and exit — and v1.1.0 is worth taking as a pin, not as a strategic bet.
  2. Has the maintainer stated an intent to support PHP 8 and a modern Doctrine/Symfony baseline? Absent that, the 1.1.0 release buys time, not a roadmap.
  3. If the requirement is Laravel authorization, why is an ACL model being considered at all? Gate/Policy plus a maintained role-permission package covers the overwhelming majority of cases.
  4. Is the need genuinely per-object, per-entity permission granularity? If yes, evaluate spatie/laravel-permission with team scoping or a purpose-built policy layer rather than resurrecting this.
  5. What is the compliance surface? A dependency with no advisory channel and no support commitment is still an audit finding, even when it is not strictly archived.

Recommendation: reject for new Laravel work. The v1.1.0 release is a credibility improvement for legacy Symfony consumers and should be acknowledged as such — it makes "pin and contain" a slightly safer interim posture. It does not create a Laravel integration path, does not restore the removed platform component, and does not supply the support commitment a production authorization layer requires.

Integration Approach

Stack fit — none as delivered. A modern Laravel application (PHP 8.1+, Laravel 10/11) has no compatible insertion point, and v1.1.0 does not change the compatibility surface. The realistic patterns, in descending order of preference:

  1. Do not integrate; re-express the requirement. Map the intended authorization semantics onto Gate/Policy definitions backed by a maintained permission package. Correct for greenfield and most brownfield Laravel work.
  2. Contain, don't integrate, for legacy Symfony. If a Symfony 2.x/3.x service must keep running, pin the bundle inside that service — v1.1.0 is a reasonable pin if it includes the class-permission fix — freeze the dependency tree, and expose authorization decisions to Laravel over an internal API or message bus. Laravel never sees the bundle.
  3. Port the semantics, not the code. If per-object ACL granularity is genuinely required, implement the object-identity/security-identity/permission model on Eloquent behind an explicit adapter interface. Treat the bundle's source — now including the 1.1.0 corrections — as a specification document. Read it, don't depend on it.

Migration path (if coming from a legacy ACL system):

  • Inventory the existing ACL tables (acl_classes, acl_object_identities, acl_entries, acl_security_identities) and the actual permission vocabulary, paying particular attention to class-level permissions — the area 1.1.0 touched, which suggests those rows carry known-bad data.
  • Model the target as roles/permissions plus, where needed, a polymorphic model_has_permissions-style table keyed on model type and ID.
  • Write a one-shot ETL with a reconciliation report comparing decisions for a sampled set of (subject, object, permission) triples before and after — including class-permission inheritance cases.
  • Run both systems in shadow mode behind a feature flag, logging divergences, before cutting over.

Compatibility. Still assume failure on PHP 8, modern Doctrine, and modern Symfony components. The 1.1.0 changes are internal API ergonomics, not a compatibility modernization. Forcing installation via replace/provide or constraint aliasing creates a permanently unsupportable branch; do not accept it as "temporary."

Sequencing. (1) Confirm the underlying requirement and rule out a re-expression. (2) If legacy, isolate and pin at v1.1.0 and set a hard exit date. (3) If ACL semantics are truly required, build the Eloquent adapter with tests derived from legacy behavior, including the class-permission edge cases. (4) Shadow-run, reconcile, cut over, decommission.

Operational Impact

Maintenance — improved from "you are the sole maintainer" to "you depend on one volunteer." That is a meaningful delta and worth stating plainly: the project has a pulse. But there is no release cadence, no support window, no documented deprecation policy, and a decade-long prior gap. Budget for the probability of abandonment, not just for the current release.

Support — still effectively none. No maintainer SLAs, no forum, no documented troubleshooting. Ramp-up cost remains "read the source," and the real complexity lives in an abandoned framework component no longer covered by current Symfony documentation. Institutional knowledge concentrates in whoever performed the original port — bus factor of one, and the upstream maintainer is a second single point of failure outside your organization.

Scaling — the classic ACL bottleneck, unchanged. ACL storage grows with the product of objects, security identities, and permission entries. Naive per-object checks produce query-per-object behavior on list screens, historically where ACL implementations fall over. Mitigations — batch preloading, decision caching, denormalized effective permissions — are custom work you own. An RBAC/permission-table design typically resolves list-view authorization with one indexed join or a cached role lookup.

Failure modes to design against:

  • Silent authorization drift — the worst outcome, and now with a concrete precedent: a class-permission evaluation bug shipped and was fixed in 1.1.0 with no advisory. Any inherited or masked permission edge case grants or denies incorrectly with no error and no upstream disclosure channel. Requires decision-level audit logging and reconciliation tests.
  • Dependency resolution breakage — a routine composer update or PHP minor upgrade renders the app unbuildable. Mitigate with a vendored lock, isolated container, or don't ship it.
  • Unpatched vulnerability exposure — no advisory subscription means CVEs in the transitive tree reach you late, via third parties.
  • Maintainer discontinuation — the 1.1.0 release reduces but does not remove the probability of re-abandonment. Have an exit plan that does not depend on upstream.
  • Knowledge loss — the original integrator leaves; documentation exists only as code.

Ramp-up. Days, not hours, for an experienced engineer to understand the wrapper and its host component; weeks for the surrounding ACL semantics plus a safe port. v1.1.0 trims a little boilerplate but adds no documentation. Factor a second engineer to remove the single-person dependency.

Bottom line for the roadmap: still a migration-away item, not a build-on item. The recommendation is unchanged and slightly better supported. v1.1.0 shows the wrapper is maintained by a responsive individual, which is worth acknowledging to the business — it makes legacy pinning defensible in the near term. It does not make this a Laravel package, does not restore the removed Symfony ACL component, and does not provide the support commitment a production authorization layer requires. If a business case for granular ACL genuinely exists, fund a maintained implementation; if it does not, close the request and point to Laravel's native authorization stack.

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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource