From e6ba543589b79dd03aec2aeb68e94f4cd06e6d0a Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Mon, 25 Aug 2025 17:00:00 +0530 Subject: [PATCH] Added roles on UserExporter and UserImporter for consistency and enhanced functionality --- app/Filament/Exports/UserExporter.php | 12 +++++-- app/Filament/Imports/UserImporter.php | 49 +++++++++++++++++++++------ 2 files changed, 48 insertions(+), 13 deletions(-) diff --git a/app/Filament/Exports/UserExporter.php b/app/Filament/Exports/UserExporter.php index 8c8f99d..ed0d8d2 100644 --- a/app/Filament/Exports/UserExporter.php +++ b/app/Filament/Exports/UserExporter.php @@ -24,11 +24,17 @@ class UserExporter extends Exporter return ++$rowNumber; }), ExportColumn::make('name') - ->label('Name'), + ->label('NAME'), ExportColumn::make('email') - ->label('Email'), + ->label('E-MAIL'), ExportColumn::make('password') - ->label('Password'), + ->label('PASSWORD'), + ExportColumn::make('roles') + ->label('ROLES') + ->state(function ($record) { + // Assuming Spatie\Permission: roles() relationship + return $record->roles->pluck('name')->join(', '); + }), ExportColumn::make('created_at') ->label('CREATED AT'), ExportColumn::make('updated_at') diff --git a/app/Filament/Imports/UserImporter.php b/app/Filament/Imports/UserImporter.php index 222c6ef..2dbaa5e 100644 --- a/app/Filament/Imports/UserImporter.php +++ b/app/Filament/Imports/UserImporter.php @@ -7,6 +7,7 @@ use Filament\Actions\Imports\Exceptions\RowImportFailedException; use Filament\Actions\Imports\ImportColumn; use Filament\Actions\Imports\Importer; use Filament\Actions\Imports\Models\Import; +use Spatie\Permission\Models\Role; use Str; class UserImporter extends Importer @@ -19,43 +20,66 @@ class UserImporter extends Importer ImportColumn::make('name') ->requiredMapping() ->exampleHeader('Name') - ->example('Admin') + ->example('RAW00001') ->label('Name') ->rules(['required']),//, 'max:255' ImportColumn::make('email') ->requiredMapping() - ->exampleHeader('Email') - ->example('admin@cripumps.com') - ->label('Email') + ->exampleHeader('E-mail') + ->example('RAW00001@cripumps.com') + ->label('E-mail') ->rules(['required', 'email']),//, 'max:255' ImportColumn::make('password') ->requiredMapping() ->exampleHeader('Password') - ->example('admin@pass') + ->example('RAW00001') ->label('Password') ->rules(['required']),//, 'max:255' + ImportColumn::make('roles') + ->requiredMapping() + ->exampleHeader('Roles') + ->example('Employee') + ->label('Roles') + ->rules(['nullable', 'string']), // Optional roles ]; } public function resolveRecord(): ?User { $warnMsg = []; - if (Str::length($this->data['name']) < 0) { - $warnMsg[] = "User name not found"; + if (Str::length($this->data['name']) < 1) { + $warnMsg[] = "User name not found!"; } // || !is_numeric($this->data['code']) || !preg_match('/^[1-9]\d{3,}$/', $this->data['code']) if (Str::length($this->data['email']) < 5) { - $warnMsg[] = "Invalid email found"; + $warnMsg[] = "Invalid email found!"; } if (Str::length($this->data['password']) < 3) { - $warnMsg[] = "Invalid password found"; + $warnMsg[] = "Invalid password found!"; + } + // Validate roles if provided + $roles = []; + if (!empty($this->data['roles'])) { + $roles = collect(explode(',', $this->data['roles'])) + ->map(fn($role) => trim($role)) + ->filter() + ->toArray(); + + foreach ($roles as $roleName) { + if (!Role::where('name', $roleName)->exists()) { + $warnMsg[] = "Role : '{$roleName}' does not exist!"; + } + } + } + else { + $warnMsg[] = "User roles not found!"; } if (!empty($warnMsg)) { throw new RowImportFailedException(implode(', ', $warnMsg)); } - User::updateOrCreate([ + $user = User::updateOrCreate([ 'email' => $this->data['email'], ], [ @@ -63,6 +87,11 @@ class UserImporter extends Importer 'password' => $this->data['password'], ]); + // Assign roles + if (!empty($roles)) { + $user->syncRoles($roles); + } + return null; // return User::firstOrNew([ // // Update existing records, matching them by `$this->data['column_name']`