Fix Subuser issues. (#747)

* Better Error handling

* Remove unique, make email lowercase in request

* Remove 'kill' option, not used.

* Prevent users from editing them selves

---------

Co-authored-by: RMartinOscar <40749467+RMartinOscar@users.noreply.github.com>
This commit is contained in:
Charles 2024-12-01 20:17:27 -05:00 committed by GitHub
parent 6d1c153d09
commit c6977e57c8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 11 deletions

View File

@ -103,7 +103,7 @@ class UserResource extends Resource
}), }),
EditAction::make() EditAction::make()
->label('Edit User') ->label('Edit User')
->hidden(fn (User $user) => auth()->user()->id === $user->id)
->authorize(fn () => auth()->user()->can(Permission::ACTION_USER_UPDATE, $server)) ->authorize(fn () => auth()->user()->can(Permission::ACTION_USER_UPDATE, $server))
->modalHeading(fn (User $user) => 'Editing ' . $user->email) ->modalHeading(fn (User $user) => 'Editing ' . $user->email)
->action(function (array $data, SubuserUpdateService $subuserUpdateService, User $user) use ($server) { ->action(function (array $data, SubuserUpdateService $subuserUpdateService, User $user) use ($server) {

View File

@ -6,6 +6,7 @@ use App\Filament\Server\Resources\UserResource;
use App\Models\Permission; use App\Models\Permission;
use App\Models\Server; use App\Models\Server;
use App\Services\Subusers\SubuserCreationService; use App\Services\Subusers\SubuserCreationService;
use Exception;
use Filament\Actions; use Filament\Actions;
use Filament\Facades\Filament; use Filament\Facades\Filament;
use Filament\Forms\Components\Actions as assignAll; use Filament\Forms\Components\Actions as assignAll;
@ -53,8 +54,7 @@ class ListUsers extends ListRecords
'md' => 4, 'md' => 4,
'lg' => 5, 'lg' => 5,
]) ])
->required() ->required(),
->unique(),
assignAll::make([ assignAll::make([
Action::make('assignAll') Action::make('assignAll')
->label('Assign All') ->label('Assign All')
@ -65,7 +65,6 @@ class ListUsers extends ListRecords
'start', 'start',
'stop', 'stop',
'restart', 'restart',
'kill',
], ],
'user' => [ 'user' => [
'read', 'read',
@ -365,18 +364,28 @@ class ListUsers extends ListRecords
->modalHeading('Invite User') ->modalHeading('Invite User')
->modalSubmitActionLabel('Invite') ->modalSubmitActionLabel('Invite')
->action(function (array $data, SubuserCreationService $service) use ($server) { ->action(function (array $data, SubuserCreationService $service) use ($server) {
$email = $data['email']; $email = strtolower($data['email']);
if (in_array('console', $data['control'])) { if (in_array('console', $data['control'])) {
$data['websocket'][0] = 'connect'; $data['websocket'][0] = 'connect';
} }
$permissions = collect($data)->forget('email')->map(fn ($permissions, $key) => collect($permissions)->map(fn ($permission) => "$key.$permission"))->flatten()->all();
$service->handle($server, $email, $permissions);
Notification::make() $permissions = collect($data)->forget('email')->map(fn ($permissions, $key) => collect($permissions)->map(fn ($permission) => "$key.$permission"))->flatten()->all();
->title('User Invited!')
->success() try {
->send(); $service->handle($server, $email, $permissions);
Notification::make()
->title('User Invited!')
->success()
->send();
} catch (Exception $exception) {
Notification::make()
->title('Failed')
->body($exception->getMessage())
->danger()
->send();
}
return redirect(self::getUrl(tenant: $server)); return redirect(self::getUrl(tenant: $server));
}), }),