short-edition/acl-bundle
A Laravel ACL package for role- and permission-based access control. Define roles and permissions, assign them to users, and protect routes, controllers, and UI elements with simple authorization checks that fit Laravel’s middleware and Gate patterns.
Framing correction (do this first). The package is labeled "Symfony AclBundle" and the description claims a "framework-agnostic core that integrates with Laravel or Symfony." That claim is not supported by the artifacts: it is a Symfony bundle, and the underlying ACL component it depends on was deprecated in Symfony 3.4 and removed from the framework in 4.0. For a Laravel roadmap this is not a "PHP package we can evaluate for adoption" — it is a Symfony-only artifact being mis-sold as portable. The TPM action is to close the ambiguity before any engineering time is spent: confirm with the requester whether the actual target is a Symfony service or the Laravel application. The answer changes the decision from "do not adopt" to "scoped, timeboxed fork assessment."
Architecture fit — does not fit the stated stack. The bundle assumes a Symfony kernel, bundle registration, Symfony's DI container with compiler passes, and Doctrine entity mapping for its five ACL tables (acl_classes, acl_entries, acl_object_identities, acl_object_identity_ancestors, acl_security_identities). None of that maps onto Laravel's service-provider lifecycle or Eloquent. Critically, it does not touch the surface where Laravel authorization actually lives — Illuminate\Contracts\Auth\Access\Gate, Gate::before, policies, or Eloquent model hooks — so even a successful boot would leave the application without an integrated authorization path.
Integration feasibility — low, and the cost is engineering-owned. Two paths, both with poor cost/benefit:
Either way the deliverable is bespoke code the team owns, not a package integration.
Technical risk — high on every axis that matters to a TPM.
Key questions for the requester (answers gate the decision):
Stack fit — reject for Laravel. There is no supported Composer-level drop-in. Adoption is a custom integration project with an open-ended tail, not a package install. Presenting this to stakeholders as "a library we can add" would be a misrepresentation of scope.
Recommended path — do not adopt; redirect to native primitives. The defensible plan:
Gate/Policy for resource- and action-level rules.Estimated foundation effort: roughly 1–2 sprints for roles/permissions plus policy wiring, extensible to tenant isolation and access auditing. That is less than the bridge spike alone, with no permanent fork obligation.
Migration path if per-object ACL semantics are genuinely mandatory. Port the data model, not the code: define ACL tables in Eloquent, model permission masks as an enum or bitmask value object, and resolve authorization through a single Gate::before hook or a custom access-gate implementation. This preserves per-object grant semantics while keeping one authorization system, one ORM, and one migration path — and it remains replaceable if the roadmap later moves to a dedicated policy engine (OPA/Rego, Cedar, Casbin, SpiceDB) for cross-service authorization.
Compatibility — assume broken until proven. No declared PHP version support, no CI, no dependents. Doctrine DBAL/ORM majors and Symfony container APIs have both moved substantially. Assume failure on PHP 8.2+ and require a pinned-version test pass before any commitment. Do not let this land in a sprint plan as an untested dependency.
Sequencing:
Decision gate to put in writing: if the bundle's services cannot be booted inside a Laravel service provider without patching vendor code, abandon. Set that as the kill criterion before the spike starts, and timebox the spike to 2–3 weeks.
Maintenance — unowned, and the cost lands on us. Zero stars and zero dependents mean no community to absorb fixes. Realistically the team forks and maintains a retired Symfony component indefinitely: PHP upgrades, dependency major bumps, and internal bug fixes all become ours. That is a permanent tax on a problem Laravel already solves, and it competes for the same engineers who would otherwise be building roadmap features. This should appear in capacity planning as a standing allocation, not a one-time integration cost.
Support — no vendor, no escalation path. Internal only. A vulnerability in the ACL layer would need to be found, triaged, and patched by us with no advisory feed watching for it. Under most third-party risk policies this is disqualifying on its own, and it is the cleanest argument to give a security or compliance reviewer.
Scaling — poor and predictable-in-the-wrong-direction. ACL entry tables scale with objects × identities. Broad grants or high object counts inflate the table and degrade resolution latency; the bundle's caching is Symfony-oriented and would need rework in any Laravel context. Native Gates with policy caching and a normalized role table scale more predictably, index more cleanly, and are far easier to reason about during an incident.
Failure modes to log in the risk register:
Ramp-up — steep and low-transfer. Engineers need working knowledge of Symfony's ACL model: object identities, security identities, permission masks, ACE ordering. That is a domain most Laravel developers have never touched and the wider PHP community has deliberately moved away from. Onboarding cost is high and the knowledge has almost no reuse value on the rest of the roadmap.
Recommendation for the decision log: Do not adopt short-edition/acl-bundle. Close the evaluation as a negative buy/adopt result — the zero-traction signal is genuinely useful here because it resolves the "should we just pull in an ACL bundle?" question cheaply. Redirect to Laravel-native Gates/Policies plus a maintained roles package, with per-object ACL semantics ported only if the requirements spike proves them mandatory. If the requester confirms a Symfony target, re-open as an internal-fork assessment with explicit budget for permanent ownership, security review, and a documented migration path to Symfony voters and expression-based access control.
Ask: approval to close this evaluation, and 2–3 days of product/engineering time for the authorization requirements spike that the roadmap needs regardless of which technology wins.
How can I help you explore Laravel packages today?