mirror of
https://github.com/pelican-dev/panel.git
synced 2025-05-19 22:14:45 +02:00
49 lines
1.3 KiB
PHP
49 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Admin\Resources\RoleResource\Pages;
|
|
|
|
use App\Filament\Admin\Resources\RoleResource;
|
|
use App\Models\Role;
|
|
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
|
|
{
|
|
protected static string $resource = RoleResource::class;
|
|
|
|
protected static bool $canCreateAnother = false;
|
|
|
|
public Collection $permissions;
|
|
|
|
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);
|
|
}
|
|
}
|