maillotf/ardaccess-bridge-bundle
maillotf/ardaccess-bridge-bundle is a PHP bridge bundle for integrating ARD Access into your application. It provides configuration and service wiring to simplify connecting access-control workflows and reduce setup boilerplate. Ideal for Laravel/PHP projects that need a clean integration layer.
What this release is: maillotf/ardaccess-bridge-bundle 1.0.2 is a patch-level release of a Symfony bundle (not a Laravel package) that wraps the ARD Access REST API. The published notes are the package README, not release-specific changelog content — no migration notes, deprecations, or breaking changes are declared, so 1.0.2 should be treated as a routine patch from a baseline of 1.0.x. Since there is no prior assessment, this document establishes the baseline rather than tracking a delta.
Architecture fit: The vendor is not framed for our stated stack. It ships as a Symfony bundle using Symfony's DI container and YAML configuration (framework.yaml, services.yaml), autowiring by service id (@ardaccess.service). A Laravel application has no framework.yaml, no bundle registration, and no convention that would auto-discover ArdaccessService. Adopting it as-is means either standing up a Symfony DI container inside Laravel or bypassing the bundle entirely. Functionally, the package is a thin, fluent facade over a remote system: carrier (cardholder CRUD), creator (attribute and criterion builders), supervision (event queries), and a smart-object helper (handbackSmartObject). Those map to physical access-control domain objects — carriers/cardholders, access events, smart objects — which means this is a system-of-record integration for security-adjacent data, not a utility library.
Integration feasibility: Technically workable, operationally thin.
openapi/schema reference, no DTOs or typed responses, no exception taxonomy shown. Return types are undocumented beyond bool on one call and implied arrays elsewhere.Technical risk:
framework.yaml with protocol: "http" and port: "80" as defaults. That is credentials-in-VCS and plaintext-over-the-wire unless we override to HTTPS and move secrets to environment variables. ARD Access credentials are likely privileged.$aas->carrier, $aas->creator, $aas->supervision behave magically (__get-style access or declared properties is unclear). Builder semantics — whether newCriterion returns a new builder, how addSubCriterion nests, whether getCriterionsArray is reusable — are only inferable from the sample.begindate/enddate (1627602000 is 30 Jul 2021, already in the past). Teams copying the example will create expired access records and may not notice, because failures are not clearly surfaced.true/false; the rest are unspecified. Without a documented exception model, callers cannot distinguish auth failure, network timeout, validation rejection, and "not found."Key questions:
maillotf/ardaccess-*) beneath this bundle that we could use directly, avoiding Symfony DI entirely?handbackSmartObject and the uid/rid/usergroup attribute set specific to one ARD Access deployment, or universal? Are any IDs tenant-scoped?ListCarriers / ListEvents, and is bulk/paged retrieval supported?Stack fit: Poor as-shipped, acceptable behind an adapter. Recommendation: do not install this bundle into the Laravel application as the integration mechanism. Two viable tracks:
config/ardaccess.php bound to .env (ARDACCESS_HOST, ARDACCESS_USERNAME, ARDACCESS_PASSWORD, ARDACCESS_SCHEME=https), registered as a singleton, and exposed through an ArdAccessGateway interface plus a thin facade.MaillotF\... types leak past the gateway boundary. This is deliberately more work and more fragile.Either way, the gateway interface is the real deliverable; the vendor package is an implementation detail we expect to replace.
Migration path: Greenfield integration — there is no incumbent to migrate from, so the risk is architectural rather than transitional. Define the anti-corruption layer first (Carrier, EventQuery, SmartObject domain models of our own), implement it against a stubbed gateway, then wire the vendor in. If we later swap the vendor or fork it, call sites do not change. If an existing direct-HTTP or manual ARD Access integration is in place, port it behind the same interface so behavior can be diffed.
Compatibility: Two compatibility surfaces to clear before commitment: (1) PHP version — the badge indicates support but the composer constraint must be read directly; (2) Symfony component versions the bundle requires vs. what Laravel already pulls in transitively (console, http-foundation, event-dispatcher). Symfony components usually coexist fine with Laravel, but conflicting version pins are the most likely installation blocker. Also confirm Laravel's HTTP client is not required — the bundle likely brings its own transport (Guzzle or Symfony HttpClient), which becomes a second HTTP stack to configure for proxies, retries, and TLS.
Sequencing:
ListCarriers) against a non-production ARD Access instance over HTTPS. This single test retires the largest unknowns: DI friction, transport config, and error shape.Maintenance: Highest ongoing cost is ownership of a niche, single-maintainer dependency. Expect to vendor the source or fork within 12–18 months; budget for that at design time by keeping the adapter thin and the vendor surface small. Patch releases like 1.0.2 arrive without changelogs, so upgrades need our own regression tests rather than release-note reading. The README-as-release-notes pattern also means deprecations will likely be discovered at upgrade time.
Support: No SLA, no commercial backing evident, GitHub issues only. Escalation for a broken integration is "we fix it." For an access-control integration that is a real operational constraint and should be documented as an accepted risk with a named internal owner and an on-call path that does not assume vendor responsiveness. Pair this with a maintained fallback: direct REST calls to ARD Access via Laravel's HTTP client, which the gateway interface makes exercisable.
Scaling: Every operation is a synchronous HTTP round-trip to the ARD Access server, so our throughput ceiling is the vendor server's, not ours. Specific concerns:
ListCarriers and ListEvents are unbounded-looking list calls with no documented pagination — assume full-result retrieval and cache aggressively.Failure modes:
false, which is easy to misread as "no records."uid, rid, usergroup) are string-typed and unvalidated; upstream changes fail at runtime, not at boot.begindate/enddate timestamps silently creates expired access rights.Ramp-up: The example controller is genuinely helpful for orientation — one screen shows the fluent style for attributes, criteria, and helper calls. Beyond that, ramp-up depends on a linked docs table of contents and, critically, on ARD Access domain knowledge (what a carrier is, how smart objects relate to cardholders, how supervision events are queried) which this package does not teach. Estimate 1–2 days for a PHP developer to be productive with the client, plus 3–5 days of ARD Access domain and environment onboarding with whoever owns the access-control system. The binding constraint is domain access, not the library. Document our gateway interface rather than the vendor API so future engineers learn our abstraction first.
How can I help you explore Laravel packages today?