44 lines
1.3 KiB
PHP
44 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Resources\Shield\RoleResource\Pages;
|
|
|
|
use App\Filament\Resources\Shield\RoleResource;
|
|
use BezhanSalleh\FilamentShield\Support\Utils;
|
|
use Filament\Resources\Pages\CreateRecord;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Collection;
|
|
|
|
class CreateRole extends CreateRecord
|
|
{
|
|
protected static string $resource = RoleResource::class;
|
|
|
|
public Collection $permissions;
|
|
|
|
protected function mutateFormDataBeforeCreate(array $data): array
|
|
{
|
|
$this->permissions = collect($data)
|
|
->filter(function ($permission, $key) {
|
|
return ! in_array($key, ['name', 'guard_name', 'select_all']);
|
|
})
|
|
->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(Utils::getPermissionModel()::firstOrCreate([
|
|
/** @phpstan-ignore-next-line */
|
|
'name' => $permission,
|
|
'guard_name' => $this->data['guard_name'],
|
|
]));
|
|
});
|
|
|
|
$this->record->syncPermissions($permissionModels);
|
|
}
|
|
}
|