mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-11-04 04:06:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.1 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\Actions\DeleteAction;
 | 
						|
use Filament\Resources\Pages\EditRecord;
 | 
						|
use Illuminate\Support\Arr;
 | 
						|
use Illuminate\Support\Collection;
 | 
						|
use Spatie\Permission\Models\Permission;
 | 
						|
 | 
						|
/**
 | 
						|
 * @property Role $record
 | 
						|
 */
 | 
						|
class EditRole extends EditRecord
 | 
						|
{
 | 
						|
    use CanCustomizeHeaderActions;
 | 
						|
    use CanCustomizeHeaderWidgets;
 | 
						|
 | 
						|
    protected static string $resource = RoleResource::class;
 | 
						|
 | 
						|
    public Collection $permissions;
 | 
						|
 | 
						|
    protected function mutateFormDataBeforeSave(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 afterSave(): 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);
 | 
						|
    }
 | 
						|
 | 
						|
    /** @return array<Action|ActionGroup> */
 | 
						|
    protected function getDefaultHeaderActions(): array
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            DeleteAction::make()
 | 
						|
                ->disabled(fn (Role $role) => $role->isRootAdmin() || $role->users_count >= 1)
 | 
						|
                ->label(fn (Role $role) => $role->isRootAdmin() ? trans('admin/role.root_admin_delete') : ($role->users_count >= 1 ? trans('admin/role.in_use') : trans('filament-actions::delete.single.label'))),            $this->getSaveFormAction()->formId('form'),
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    protected function getFormActions(): array
 | 
						|
    {
 | 
						|
        return [];
 | 
						|
    }
 | 
						|
}
 |