diff --git a/app/Filament/Resources/UserResource.php b/app/Filament/Resources/UserResource.php new file mode 100644 index 0000000..69a2489 --- /dev/null +++ b/app/Filament/Resources/UserResource.php @@ -0,0 +1,76 @@ +components([ + TextInput::make('name') + ->required() + ->maxLength(255), + TextInput::make('email') + ->email() + ->required() + ->maxLength(255), + TextInput::make('provider_name') + ->label('OIDC Provider') + ->disabled(), + TextInput::make('provider_id') + ->label('OIDC ID') + ->disabled(), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + TextColumn::make('name')->sortable()->searchable(), + TextColumn::make('email')->sortable()->searchable(), + TextColumn::make('provider_name')->label('OIDC Provider'), + TextColumn::make('provider_id')->label('OIDC ID'), + TextColumn::make('created_at')->dateTime()->sortable(), + ]) + ->filters([ + // + ]) + ->recordActions([ + EditAction::make(), + ]) + ->toolbarActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => UserResource\Pages\ListUsers::route('/'), + 'create' => UserResource\Pages\CreateUsers::route('/create'), + 'edit' => UserResource\Pages\EditUsers::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/UserResource/Pages/CreateUsers.php b/app/Filament/Resources/UserResource/Pages/CreateUsers.php new file mode 100644 index 0000000..6d217e3 --- /dev/null +++ b/app/Filament/Resources/UserResource/Pages/CreateUsers.php @@ -0,0 +1,11 @@ +with('error', 'Authentication failed.'); } + if (Auth::check()) { + $user = Auth::user(); + $user->update([ + 'provider_name' => $provider, + 'provider_id' => $socialUser->getId(), + ]); + + return redirect()->intended('/admin')->with('status', 'Account linked successfully!'); + } + // Find user by provider_id $user = User::where('provider_name', $provider) ->where('provider_id', $socialUser->getId()) diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 1038366..a97ee8d 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -21,6 +21,8 @@ use Illuminate\View\Middleware\ShareErrorsFromSession; use Filament\Support\Facades\FilamentView; use Illuminate\Support\Facades\Blade; +use Filament\Navigation\MenuItem; + class AdminPanelProvider extends PanelProvider { public function boot() @@ -51,6 +53,12 @@ class AdminPanelProvider extends PanelProvider ->login() ->brandName(env('APP_NAME')) ->homeUrl('/') + ->userMenuItems([ + MenuItem::make() + ->label('Link OIDC Account') + ->icon('heroicon-o-link') + ->url(fn (): string => url('auth/social/oidc')), + ]) ->colors([ 'primary' => Color::Amber, ])