47 lines
1.5 KiB
PHP
47 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Filament\Resources\Roles\Pages;
|
|
|
|
use App\Filament\Resources\Roles\Roles\RoleResource;
|
|
use BezhanSalleh\FilamentShield\Support\Utils;
|
|
use Filament\Resources\Pages\CreateRecord;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Collection;
|
|
|
|
class CreateRole extends CreateRecord
|
|
{
|
|
public Collection $permissions;
|
|
|
|
protected static string $resource = RoleResource::class;
|
|
|
|
protected function mutateFormDataBeforeCreate(array $data): array
|
|
{
|
|
$this->permissions = collect($data)
|
|
->filter(fn (mixed $permission, string $key): bool => ! in_array($key, ['name', 'guard_name', 'select_all', Utils::getTenantModelForeignKey()]))
|
|
->values()
|
|
->flatten()
|
|
->unique();
|
|
|
|
if (Utils::isTenancyEnabled() && Arr::has($data, Utils::getTenantModelForeignKey()) && filled($data[Utils::getTenantModelForeignKey()])) {
|
|
return Arr::only($data, ['name', 'guard_name', Utils::getTenantModelForeignKey()]);
|
|
}
|
|
|
|
return Arr::only($data, ['name', 'guard_name']);
|
|
}
|
|
|
|
protected function afterCreate(): void
|
|
{
|
|
$permissionModels = collect();
|
|
$this->permissions->each(function (string $permission) use ($permissionModels): void {
|
|
$permissionModels->push(Utils::getPermissionModel()::firstOrCreate([
|
|
'name' => $permission,
|
|
'guard_name' => $this->data['guard_name'],
|
|
]));
|
|
});
|
|
|
|
$this->record->syncPermissions($permissionModels);
|
|
}
|
|
}
|