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

Vendra User Laravel Package

misaf/vendra-user

User management module for the Vendra admin panel, providing CRUD screens, authentication-ready user models, and role/permission handling so you can add team and customer accounts to your Laravel application quickly.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: misaf/vendra-user is not a general-purpose community package — it is a read-only subtree split of the misaf/vendra monorepo, meaning this repository is a distribution artifact, not the development home. Architecturally it is a first-party domain module: it owns user persistence, the Misaf\VendraUser namespace, factories, seeders, policies, observers, console commands, Filament admin classes, config, migrations, translations, and tests. It explicitly sits inside a module graph that includes misaf/vendra-support (capabilities/tagging), a separate misaf/vendra-socialite (Socialite user model, registrar, Filament socialite wiring), and a tenant layer (TenantSchema, TenantTableRegistry, vendra-tenant:enable). The fit question for a TPM is therefore not "does this package do users well?" but "are we adopting the Vendra platform stack, or bolting one module of it onto a non-Vendra Laravel app?" The former is low-friction; the latter imports a dependency graph and a set of conventions (translatable JSON columns, tenant column registration, tag integration contracts) that only pay off if the rest of the graph is present.

Integration feasibility: Good for a greenfield or existing Vendra application; moderate for a standalone Laravel app. The integration surface is conventional and well-documented: composer require misaf/vendra-user, publish config and migrations (--tag=vendra-user-config, --tag=vendra-user-migrations), review config/vendra-user.php for table names, route prefixes, middleware, and model bindings, then migrate. The real cost centres are: (1) deciding whether to extend the package User model or make your existing App\Models\User implement the package contract plus trait; (2) creating users through the package service rather than User::create() so profile/address side effects and events are not bypassed; (3) disabling package-registered routes/views if you already own account routes, to avoid duplicate route names and middleware conflicts. Filament admin UI is bundled — a genuine accelerant if you are on Filament, dead weight (and an extra dependency surface) if you are not.

Technical risk: Two distinct risks, and they should not be conflated. Subtree-split risk is the headline: this repository is [READ ONLY], so issues, PRs, and security fixes filed here are likely to be ignored — all change control, code review, and disclosure must route through misaf/vendra. Any governance plan that treats misaf/vendra-user as the upstream is wrong. Release-opacity risk is inherited: the v1.12.3 notes are a bare compare link (v1.11.0...v1.12.3), with no itemized changes, so the TPM cannot size the upgrade from the artifact alone. There are also concrete behavioural contracts that make for sharp edges: translatable fields must be JSON columns and must stay consistently translation-aware across casts, factories, validation, Filament locale UI, API serialization and tests; every table whose migration calls TenantSchema::addTenantColumn() must be registered with TenantTableRegistry or tenant retrofit silently misses schemas migrated pre-tenancy; and the package's tag handling must go through Misaf\VendraSupport\Capabilities\HasOptionalTags with Tagger listed only under suggest — importing the concrete Tagger model is a design violation. The 1-star count is not a meaningful quality signal here (it measures the split, not the platform) but it does confirm there is effectively no external community to lean on — support is vendor/team-internal.

Key questions:

  • Are we committing to the Vendra module graph, or adopting this package standalone? If standalone, what justifies carrying vendra-support, Filament, and tenant affordances?
  • Is the monorepo (misaf/vendra) the acknowledged upstream for issues, security disclosures, and PRs, and do we have a named owner on the vendor/team side?
  • What is the supported Laravel/PHP matrix for v1.12.3, and did the minimum versions move since v1.11.0?
  • What actually changed between v1.11.0 and v1.12.3 — new migrations, config keys, event signatures, contract changes?
  • Does our existing users table conflict with the package migration, and should that migration be skipped or adapted?
  • Are self.version alignment and transitive-API exposure rules enforced in our lockfile, so we do not drift across the package graph?
  • Is Filament admin UI in scope for us, now or later? If not, can it be disabled cleanly rather than carried?

Integration Approach

Stack fit: Assume Laravel/PHP; validate against your Laravel major, PHP runtime, database driver, and auth scaffolding before committing. The package is opinionated toward a Vendra application: Eloquent user persistence, authentication-ready account handling, configurable profile data, Filament admin surfaces, optional tenancy, optional tagging. Score the fit on adjacency: if the app is on Filament and planning multi-tenancy, the module is close to free. If the app is an API-only, single-tenant, non-Filament product with an entrenched auth domain, you will be disabling or reimplementing a meaningful fraction of the package and should re-evaluate the business case.

Migration path: Treat first adoption and version upgrade as separate tracks.

  • First adoption: install, publish config and migrations into the host app, review config/vendra-user.php line by line, and decide up front between "extend the package User" (greenfield) and "implement contract + trait on our existing User" (brownfield). Run migrations in a disposable environment first, specifically to observe ordering against any pre-existing users table. Then rewire the auth provider, password broker, policies, gates, and remember-token handling together — a partial model swap is the classic failure here.
  • Upgrade (v1.11.0 → v1.12.3): pin current, branch, bump the Composer constraint, diff published config and migration files against the new vendor copies, and diff the actual commits behind the compare link. Do not rely on the release title.

Compatibility: Check Composer resolution against your lockfile for Laravel, PHP, Filament, and misaf/vendra-support / misaf/vendra-tenant constraints. Because the package graph uses self.version alignment, a single-module bump can force a coordinated multi-package bump — plan the whole graph move as one change, not package-by-package. If you have customised published migrations, overridden the user model, or added columns via separate migrations, verify each against the new release. Confirm the vendra-user testsuite and static analysis (composer stan) run green in your CI, not just upstream's.

Sequencing:

  1. Confirm governance: upstream repo, vendor contact, disclosure path.
  2. Pull the real commit/PR diff behind v1.11.0...v1.12.3; classify as patch / feature / potentially breaking.
  3. Stand up a spike branch: publish config + migrations, run php artisan migrate against a production-shaped schema clone.
  4. Validate the four critical flows end to end: registration, login, profile update, address management.
  5. Verify tenant retrofit — run vendra-tenant:enable {tenant} against a pre-tenancy schema and confirm TenantTableRegistry registration catches every TenantSchema::addTenantColumn() table.
  6. Run full CI: application tests plus php artisan test --compact --testsuite=vendra-user and composer stan.
  7. Deploy to staging with production-like data; then progressive rollout with a documented rollback to the prior pinned version.

Operational Impact

Maintenance: The dominant cost is changelog reconstruction, not code. With release notes reduced to a compare link, every upgrade requires someone to read the diff and write an internal upgrade note — budget this as recurring engineering time, not a one-off. Pin the version explicitly (no floating constraints), and because this is a read-only split, keep any local patches as host-app overrides (custom models, event listeners, separate migrations, view overrides) rather than vendor edits, which would be silently clobbered and impossible to upstream from here. Establish a monthly-or-quarterly review of misaf/vendra for releases across the whole graph, since self.version alignment means the modules move together.

Support: Assume no community support: 1 star, a split repo, and a [READ ONLY] banner mean the issue tracker here is not a support channel. Operational support must be contractually or organisationally internal — a named owner, an agreed SLA for security patches, and a documented path to file upstream issues against misاف/vendra. If that owner does not exist, this package is a single-maintainer dependency on the authentication path, which is a material business-continuity risk that must be accepted explicitly by someone senior.

Scaling: The package sits on the hot path — session handling, login lookups, and per-request user resolution. Two scaling concerns are specific and worth pre-empting. First, address/profile relationships invite N+1 queries on customer lists and checkout/account pages; mandate eager loading and verify query counts with Telescope or DB::listen() before load testing. Second, translatable fields implemented as JSON columns are harder to index and filter than scalar columns; if you make a field translatable, confirm the query patterns still hold at volume. Multi-tenancy adds a third axis: connection and table-name configuration must be validated under tenant switching, not just single-tenant load. Authenticated-request throughput, not raw DB size, is the metric to watch.

Failure modes:

  • Config cache staleness — new keys invisible behind an old cached config; always config:clear before config:cache on deploy.
  • Migration ordering / collision — package migrations assuming they own or follow the users table; the highest-probability first-deploy failure.
  • Partial model swap — provider changed but password resets, remember tokens, policies, or relationships still pointing at the old model.
  • Route and middleware collision — package-registered account routes duplicating host route names.
  • Tenant retrofit gap — a table whose migration used TenantSchema::addTenantColumn() but was never registered with TenantTableRegistry; fails quietly, discovered later as cross-tenant data exposure or missing columns.
  • Translation inconsistency — a $translatable field backed by a non-JSON column, or a non-translatable field carrying translation-shaped array data; surfaces as serialization or Filament locale bugs rather than loud errors.
  • Graph drift — bumping one Vendra module without its self.version-aligned siblings.
  • Silent abandonment — no upstream activity or no internal owner, discovered at the worst possible moment (a security advisory on auth code).

Ramp-up: Low for Laravel developers — the package follows familiar Eloquent, service-provider, config-publish, and trait patterns, and the module's own skill documentation is unusually explicit about conventions (namespace, module boundary, translatable persistence, tenant registration, transitive-API policy, tag integration). The genuine ramp-up cost is institutional: teaching the team that this repo is read-only, that the monorepo is the source of truth, that user creation must go through the package service rather than User::create(), and that the test/analysis gate is --testsuite=vendra-user plus composer stan. Plan roughly a day of onboarding for the conventions and one to two days per upgrade cycle for diff review and staging validation; add explicit time if tenancy or translation work is in scope, since both have silent-failure characteristics that only show up under test coverage you have to write yourself.

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.
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource