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.
composer require misaf/vendra-user. Be aware this repository is a read-only subtree split of the misaf/vendra monorepo — issues, PRs, and full history live upstream at misaf/vendra under packages/vendra-user. File bugs there, and check composer.json for the Laravel/PHP constraints before bumping.Misaf\VendraUser. Your first three stops are:
src/Models/User.php — the canonical user entity and its relationships (profile, addresses, tags).TenantTableRegistry entries, model bindings, routes, and Filament panel wiring.database/migrations — required columns, foreign keys, and which tables call TenantSchema::addTenantColumn().vendor:publish with --tag=); typical Laravel packages expose config, migrations, and translations separately. Read config/vendra-user.php for table names, connections, route prefixes, middleware, and model bindings.php artisan migrate, then verify tenancy: any table whose migration calls TenantSchema::addTenantColumn() must be registered with TenantTableRegistry in the package service provider so vendra-tenant:enable {tenant} can retrofit pre-existing schemas.User model directly and add your domain fields in your own migration. First use case, existing app: keep App\Models\User, implement the package contract, and pull in the package trait rather than swapping the model wholesale.php artisan test --compact --testsuite=vendra-user and composer stan. If those pass on a clean install, your Laravel/PHP versions and dependency graph are compatible.application-info and search-docs before editing, and apply the laravel-best-practices skill to any Laravel PHP you touch.config/auth.php providers, password brokers, gates, and policies must all point at the same class.User::create() bypasses profile creation, address bootstrapping, and domain events. Use the package registration path, then attach your own data in a listener or follow-up action so you keep the decoupling.$translatable array, that column must be JSON, and you must carry translation-awareness through traits/casts, factories, validation, Filament locale UI, API serialization, and tests. Conversely, a field not in $translatable must use a scalar column and must not use Spatie Translatable, translatable slug traits, locale switchers, or translated callbacks.Misaf\VendraSupport\Capabilities\HasOptionalTags as the single source of its tags() relationship and pivot metadata. Define a stable package-owned tag type, use TagIntegration for availability and UI integration, and never import the concrete Vendra Tagger model/provider or define the relationship through Spatie HasTags. Tagger belongs under Composer suggest, not require.packages/vendra-user; extend resources/pages there rather than duplicating them in the host app.SocialiteUser, SocialiteRegistrar, and the filament-socialite wiring live in the separate misaf/vendra-socialite package. Don't reintroduce them, and don't add a dutchcodingcompany/filament-socialite dependency to this package.Misaf\VendraUser. The host app should only integrate the module, not host user-domain code.$translatable without a JSON column (or a scalar field that sneaks into a translatable trait) will pass review and fail at runtime or, worse, silently store arrays in a varchar. Audit factories, validation, and Filament locale tabs together whenever you touch it.TenantSchema::addTenantColumn() but missing from TenantTableRegistry won't be retrofitted by vendra-tenant:enable {tenant}. Preserve configured table names and connections when registering — hardcoding them breaks multi-connection setups.require. This applies only to Vendra platform packages under require; never extend it to require-dev, suggest, incidental implementation dependencies, or third-party packages. Removing or replacing an exposed dependency is a breaking change, and self.version must stay aligned across the Vendra package graph.php artisan config:clear before config:cache. New keys in a release are invisible while a stale cached config is active — this is the classic "the config file clearly says X" false alarm.users already exists. With an existing users table, adjust timestamps or skip the package's user-table migration rather than editing published files — add your own columns in a separate migration.App\Models\User. Update all references, not just config/auth.php.DB::listen() or Telescope to inspect queries when profile/address relations misbehave, then cross-check foreign key column names against the published config — mismatches there are silent until a null relationship appears.packages/vendra-user and preserve public contracts. Run php artisan test --compact --testsuite=vendra-user and composer stan locally; apply the tailwindcss-development skill only when you actually change Blade markup or Tailwind classes.How can I help you explore Laravel packages today?