mirror of
https://github.com/AnimeThemes/animethemes-server.git
synced 2026-09-06 12:45:03 +02:00
62 lines
1.6 KiB
PHP
62 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Filament\Actions\Models\Auth\User;
|
|
|
|
use App\Filament\Actions\BaseAction;
|
|
use App\Filament\Components\Fields\Select;
|
|
use App\Models\Auth\Role;
|
|
use App\Models\Auth\User;
|
|
use Filament\Schemas\Schema;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Support\Arr;
|
|
|
|
class GiveRoleAction extends BaseAction
|
|
{
|
|
final public const string FIELD_ROLE = 'role';
|
|
|
|
public static function getDefaultName(): ?string
|
|
{
|
|
return 'user-give-role';
|
|
}
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->label(__('filament.actions.user.give_role.name'));
|
|
|
|
$this->action(fn (User $record, array $data) => $this->handle($record, $data));
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $data
|
|
*/
|
|
public function handle(User $user, array $data): void
|
|
{
|
|
$role = Role::findById(intval(Arr::get($data, self::FIELD_ROLE)));
|
|
|
|
$user->assignRole($role);
|
|
}
|
|
|
|
public function getSchema(Schema $schema): Schema
|
|
{
|
|
$roles = Role::query()
|
|
->whereDoesntHave(Role::RELATION_USERS, fn (Builder $query) => $query->whereKey($this->getRecord()->getKey()))
|
|
->get([Role::ATTRIBUTE_ID, Role::ATTRIBUTE_NAME])
|
|
->keyBy(Role::ATTRIBUTE_ID)
|
|
->map(fn (Role $role) => $role->name)
|
|
->toArray();
|
|
|
|
return $schema
|
|
->components([
|
|
Select::make(self::FIELD_ROLE)
|
|
->label(__('filament.resources.singularLabel.role'))
|
|
->searchable()
|
|
->required()
|
|
->options($roles),
|
|
]);
|
|
}
|
|
}
|