69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Filament\Admin\Resources\RoleResource\Pages;
 | |
| 
 | |
| use App\Filament\Admin\Resources\RoleResource;
 | |
| use App\Models\Role;
 | |
| use App\Traits\Filament\CanCustomizeHeaderActions;
 | |
| use App\Traits\Filament\CanCustomizeHeaderWidgets;
 | |
| use Filament\Actions\Action;
 | |
| use Filament\Actions\ActionGroup;
 | |
| use Filament\Resources\Pages\CreateRecord;
 | |
| use Illuminate\Support\Arr;
 | |
| use Illuminate\Support\Collection;
 | |
| use Spatie\Permission\Models\Permission;
 | |
| 
 | |
| /**
 | |
|  * @property Role $record
 | |
|  */
 | |
| class CreateRole extends CreateRecord
 | |
| {
 | |
|     use CanCustomizeHeaderActions;
 | |
|     use CanCustomizeHeaderWidgets;
 | |
| 
 | |
|     public Collection $permissions;
 | |
| 
 | |
|     protected static string $resource = RoleResource::class;
 | |
| 
 | |
|     protected static bool $canCreateAnother = false;
 | |
| 
 | |
|     /** @return array<Action|ActionGroup> */
 | |
|     protected function getDefaultHeaderActions(): array
 | |
|     {
 | |
|         return [
 | |
|             $this->getCreateFormAction()->formId('form'),
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     protected function getFormActions(): array
 | |
|     {
 | |
|         return [];
 | |
|     }
 | |
| 
 | |
|     protected function mutateFormDataBeforeCreate(array $data): array
 | |
|     {
 | |
|         $this->permissions = collect($data)
 | |
|             ->filter(function ($permission, $key) {
 | |
|                 return !in_array($key, ['name', 'guard_name']);
 | |
|             })
 | |
|             ->values()
 | |
|             ->flatten()
 | |
|             ->unique();
 | |
| 
 | |
|         return Arr::only($data, ['name', 'guard_name']);
 | |
|     }
 | |
| 
 | |
|     protected function afterCreate(): void
 | |
|     {
 | |
|         $permissionModels = collect();
 | |
|         $this->permissions->each(function ($permission) use ($permissionModels) {
 | |
|             $permissionModels->push(Permission::firstOrCreate([
 | |
|                 'name' => $permission,
 | |
|                 'guard_name' => $this->data['guard_name'],
 | |
|             ]));
 | |
|         });
 | |
| 
 | |
|         $this->record->syncPermissions($permissionModels);
 | |
|     }
 | |
| }
 | 
