Installation:
composer require moox/user
php artisan mooxuser:install
First Use Case:
use Moox\User\Models\User;
$user = User::create([
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => bcrypt('secure123'),
]);
use Illuminate\Support\Facades\Auth;
if (Auth::attempt(['email' => 'john@example.com', 'password' => 'secure123'])) {
// Authenticated
}
Where to Look First:
config/mooxuser.php (published via vendor:publish).app/Models/User.php (extended from Moox\User\Models\User).database/migrations/[timestamp]_create_users_table.php.User Management:
// Create
$user = User::create([...]);
// Read
$user = User::find(1);
// Update
$user->update(['name' => 'Updated Name']);
// Delete (soft delete if enabled)
$user->delete();
use Moox\User\Models\User;
$activeUsers = User::active()->get(); // Assuming 'active' scope exists
Authentication & Authorization:
// Authenticate via API
$credentials = $request->only('email', 'password');
if (Auth::guard('api')->attempt($credentials)) {
$token = $request->user()->createToken('API Token')->plainTextToken;
}
// Define a policy
php artisan make:policy PostPolicy --model=Post
// Use in controller
$this->authorize('update', $post);
Roles/Permissions (if supported):
$user->assignRole('admin'); // Hypothetical; check package docs
if ($user->can('edit-posts')) {
// Granted
}
Events & Listeners:
// In EventServiceProvider
protected $listen = [
'Moox\User\Events\UserRegistered' => [
'App\Listeners\SendWelcomeEmail',
],
];
API Resources:
php artisan make:resource UserResource --model=User
return new UserResource($user);
namespace App\Models;
use Moox\User\Models\User as MooxUser;
class User extends MooxUser {
protected $casts = [
'is_admin' => 'boolean',
];
}
use Illuminate\Validation\Rule;
$validated = $request->validate([
'email' => ['required', Rule::unique('users')->ignore($user->id)],
]);
// database/seeds/UsersTableSeeder.php
use Moox\User\Models\User;
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder {
public function run() {
User::create([
'name' => 'Admin',
'email' => 'admin@example.com',
'password' => bcrypt('admin123'),
]);
}
}
Migration Conflicts:
users table after installation, run php artisan mooxuser:install --force to re-publish migrations (if supported).Config Overrides:
config/mooxuser.php may be overwritten during package updates. Use config_array_merge_recursive in your AppServiceProvider to preserve settings:
public function boot() {
config(['mooxuser.custom_setting' => env('MOOXUSER_CUSTOM_SETTING', 'default')]);
}
Authentication Guard Assumptions:
web). Explicitly specify guards in Auth::guard('name') to avoid ambiguity.Soft Deletes:
'softDeletes' => true in config), use:
$user = User::withTrashed()->find(1); // Find even if soft-deleted
$user->forceDelete(); // Permanently delete
Event Binding:
UserRegistered) aren’t firing, verify:
EventServiceProvider.use Moox\User\Models\User;
use Illuminate\Support\Facades\Log;
User::created(function ($user) {
Log::info('New user created', ['user_id' => $user->id]);
});
auth middleware is applied to routes requiring authentication:
Route::middleware(['auth:sanctum'])->get('/user', function () {
return response()->json(['user' => auth()->user()]);
});
Custom Fields:
users table via migration, then extend the model:
class User extends MooxUser {
protected $fillable = ['name', 'email', 'password', 'custom_field'];
}
Custom Auth Logic:
AuthenticatesUsers trait in a custom controller:
use Moox\User\Traits\Auth\AuthenticatesUsers;
class CustomLoginController extends Controller {
use AuthenticatesUsers;
protected function credentials(Request $request) {
return $request->only('email', 'password', 'custom_auth_field');
}
}
API Token Customization:
HasApiTokens trait or override token generation:
use Laravel\Sanctum\HasApiTokens;
class User extends MooxUser {
use HasApiTokens;
public function createToken($name = null) {
return $this->tokens()->create([
'name' => $name ?? 'Personal Access Token',
'abilities' => ['*'], // Customize permissions
]);
}
}
Observers:
User model for pre/post actions:
// app/Observers/UserObserver.php
class UserObserver {
public function creating(User $user) {
$user->uuid = Str::uuid()->toString();
}
}
// Register in AppServiceProvider
User::observe(UserObserver::class);
Testing:
// database/factories/UserFactory.php
$factory->define(User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => bcrypt('password'),
];
});
$user = User::factory()->create();
$this->actingAs($user);
$this->assertAuthenticated();
How can I help you explore Laravel packages today?