diff --git a/app/Filament/Pages/Auth/Login.php b/app/Filament/Pages/Auth/Login.php new file mode 100644 index 0000000..929d2ad --- /dev/null +++ b/app/Filament/Pages/Auth/Login.php @@ -0,0 +1,21 @@ +environment('local')) { + $this->form->fill([ + 'email' => \config('app.seed.users.super.email'), + 'password' => \config('app.seed.users.super.password'), + 'remember' => true, + ]); + } + } +} diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php index 609ebbe..9d9cb60 100644 --- a/app/Http/Controllers/LoginController.php +++ b/app/Http/Controllers/LoginController.php @@ -11,8 +11,8 @@ class LoginController extends Controller public function show(Request $request) { return inertia('Login/Show', app()->environment('local', 'testing') ? [ - 'email' => config('app.seed.emails.super'), - 'password' => '12345', + 'email' => config('app.seed.users.super.email'), + 'password' => config('app.seed.users.super.password'), 'remember' => true, 'redirect' => $request->query('redirect', ''), ] : []); diff --git a/app/Models/User.php b/app/Models/User.php index 4dc8360..81aebc4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,6 +7,7 @@ use Filament\Models\Contracts\HasName; use Filament\Panel; use Illuminate\Contracts\Auth\MustVerifyEmail; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; @@ -62,6 +63,11 @@ protected function allPermissions(): Attribute ); } + protected function scopeHasRoles(Builder $query, array $roles): void + { + $query->whereHas('roles', fn (Builder $query) => $query->whereIn('name', $roles)); + } + public function updatePassword(?string $new_password = '') { if ($new_password && $new_password != $this->password) { diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 1f49f1e..542e201 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -29,7 +29,7 @@ public function panel(Panel $panel): Panel ->default() ->id('admin') ->path('admin') - ->login() + ->login(\App\Filament\Pages\Auth\Login::class) ->colors([ 'primary' => '#1e293b', ]) @@ -43,6 +43,7 @@ public function panel(Panel $panel): Panel FilamentSpatieRolesPermissionsPlugin::make(), EnvironmentIndicatorPlugin::make() ->visible(fn () => \auth()->user()?->hasRole(Role::SUPER_ADMIN) && \app()->environment() !== 'production') + ->showBorder(false) ->color(fn () => match (app()->environment()) { 'production' => Color::Green, 'staging' => Color::Blue, diff --git a/config/app.php b/config/app.php index 5739a6f..41da6c5 100644 --- a/config/app.php +++ b/config/app.php @@ -3,10 +3,19 @@ return [ 'seed' => [ - 'emails' => [ - 'super' => env('SEED_SUPER_ADMIN_EMAIL', 'super@laravel-inertia-template.test'), - 'admin' => env('SEED_ADMIN_EMAIL', 'admin@laravel-inertia-template.test'), - 'user' => env('SEED_USER_EMAIL', 'user@laravel-inertia-template.test'), + 'users' => [ + 'super' => [ + 'email' => env('SEED_SUPER_ADMIN_EMAIL', 'super@laravel-inertia-template.test'), + 'password' => env('SEED_SUPER_ADMIN_PASSWORD', '12345'), + ], + 'admin' => [ + 'email' => env('SEED_ADMIN_EMAIL', 'admin@laravel-inertia-template.test'), + 'password' => env('SEED_ADMIN_PASSWORD', '12345'), + ], + 'user' => [ + 'email' => env('SEED_USER_EMAIL', 'user@laravel-inertia-template.test'), + 'password' => env('SEED_USER_PASSWORD', '12345'), + ], ], ], diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index b1c666d..4e906c0 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -35,29 +35,32 @@ public function superAdmin(?string $email = null) { return $this ->state(fn (array $attributes) => [ - 'email' => $email ?: \config('app.seed.emails.super'), + 'email' => \config('app.seed.users.super.email'), + 'password' => \config('app.seed.users.super.password'), ]) ->afterCreating(function (User $user) { $user->assignRole(Role::SUPER_ADMIN->value); }); } - public function admin(?string $email = null) + public function admin() { return $this ->state(fn (array $attributes) => [ - 'email' => $email ?: \config('app.seed.emails.admin'), + 'email' => \config('app.seed.users.admin.email'), + 'password' => \config('app.seed.users.admin.password'), ]) ->afterCreating(function (User $user) { $user->assignRole(Role::ADMIN->value); }); } - public function user(?string $email = null) + public function user() { return $this ->state(fn (array $attributes) => [ - 'email' => $email ?: \config('app.seed.emails.user'), + 'email' => \config('app.seed.users.user.email'), + 'password' => \config('app.seed.users.user.password'), ]) ->afterCreating(function (User $user) { $user->assignRole(Role::USER->value); diff --git a/phpunit.xml b/phpunit.xml index 27fcdde..cd5de4a 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -8,8 +8,8 @@ ./tests/Feature - tests/Architecture - + tests/Architecture + @@ -20,6 +20,7 @@ ./app/Filament ./app/Providers/Filament ./app/Providers/HorizonServiceProvider.php + ./app/Providers/TelescopeServiceProvider.php diff --git a/tests/Feature/Controllers/LoginControllerTest.php b/tests/Feature/Controllers/LoginControllerTest.php index bfbc0e0..c743703 100644 --- a/tests/Feature/Controllers/LoginControllerTest.php +++ b/tests/Feature/Controllers/LoginControllerTest.php @@ -28,8 +28,8 @@ ->assertInertia( fn (Assert $page) => $page ->component('Login/Show') - ->where('email', config('app.seed.emails.super')) - ->where('password', '12345') + ->where('email', config('app.seed.users.super.email')) + ->where('password', config('app.seed.users.super.password')) ->where('remember', true) ->where('redirect', '') ); diff --git a/tests/Pest.php b/tests/Pest.php index 173d526..bd8abaa 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -55,10 +55,10 @@ function superAdminUser() { - return User::whereEmail(\config('app.seed.emails.super'))->first(); + return User::whereEmail(\config('app.seed.users.super.email'))->first(); } function adminUser() { - return User::whereEmail(\config('app.seed.emails.admin'))->first(); + return User::whereEmail(\config('app.seed.users.admin.email'))->first(); }