blendbyte/filament-resource-lock
blendbyte/filament-resource-lock adds record locking to Filament resources, preventing users from editing the same record simultaneously. It shows lock ownership, blocks conflicting edits, and releases locks automatically, helping teams avoid overwritten changes.
exists() query in isLocked() matters for product correctness: global scopes (tenant, soft-delete, visibility) are how most SaaS admin panels isolate data. A lock check that ignores them can report false positives/negatives across tenants. This release makes the package safer to ship in multi-tenant products, which is a roadmap-relevant signal, not just a bug fix.Consider adopting when:
isLocked() fix is the reason this now qualifies).Look elsewhere or build in-house when:
SELECT ... FOR UPDATE, optimistic version columns) enforced on every write path, including APIs and imports.isLocked() scoping bug is a reminder that edge cases are still being found.To executives: This is a small, low-cost add-on for our admin tooling that stops two people from overwriting each other's edits — a class of bug that produces bad data, manual cleanup, and support load. It's a mature-enough 2.x package with active maintenance; the newest patch fixes a multi-tenant data-isolation flaw and a stale-UI bug, so it's now appropriate for our environment. Effort is days, not weeks, versus building and maintaining equivalent locking logic ourselves. Recommendation: pilot on one high-traffic admin resource, measure overwrite incidents and support tickets before and after, then decide on wider rollout.
To engineering: Scope is a Filament plugin providing record-level locks with acquire/release flows and locked-state UI. v2.2.1 is a patch, no breaking changes: it fixes isLocked() running an exists() query that ignored global scopes (relevant to our tenant and soft-delete scopes) and clears the cached lock relation on unlock to avoid stale "locked" states after release. Integration cost is low but not zero — we must decide lock TTL/heartbeat, behavior on lock expiry mid-edit, and how locks interact with our API write paths, which this package does not protect. Please also confirm the lock check respects our tenant global scope in an integration test, since that was the class of bug just fixed. Treat this as advisory locking; database-level concurrency control remains our responsibility for non-Filament writes.
How can I help you explore Laravel packages today?