mirror of
https://github.com/pelican-dev/panel.git
synced 2025-12-08 18:30:15 +01:00
Only allow server transfers to accessible nodes (#1951)
This commit is contained in:
parent
c312ef493f
commit
0fe8917668
@ -12,7 +12,6 @@ use App\Filament\Components\StateCasts\ServerConditionStateCast;
|
|||||||
use App\Filament\Server\Pages\Console;
|
use App\Filament\Server\Pages\Console;
|
||||||
use App\Models\Allocation;
|
use App\Models\Allocation;
|
||||||
use App\Models\Egg;
|
use App\Models\Egg;
|
||||||
use App\Models\Node;
|
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Repositories\Daemon\DaemonServerRepository;
|
use App\Repositories\Daemon\DaemonServerRepository;
|
||||||
@ -1008,7 +1007,7 @@ class EditServer extends EditRecord
|
|||||||
Actions::make([
|
Actions::make([
|
||||||
Action::make('transfer')
|
Action::make('transfer')
|
||||||
->label(trans('admin/server.transfer'))
|
->label(trans('admin/server.transfer'))
|
||||||
->disabled(fn (Server $server) => Node::count() <= 1 || $server->isInConflictState())
|
->disabled(fn (Server $server) => user()?->accessibleNodes()->count() <= 1 || $server->isInConflictState())
|
||||||
->modalHeading(trans('admin/server.transfer'))
|
->modalHeading(trans('admin/server.transfer'))
|
||||||
->schema($this->transferServer())
|
->schema($this->transferServer())
|
||||||
->action(function (TransferServerService $transfer, Server $server, $data) {
|
->action(function (TransferServerService $transfer, Server $server, $data) {
|
||||||
@ -1080,10 +1079,10 @@ class EditServer extends EditRecord
|
|||||||
->label(trans('admin/server.node'))
|
->label(trans('admin/server.node'))
|
||||||
->prefixIcon('tabler-server-2')
|
->prefixIcon('tabler-server-2')
|
||||||
->selectablePlaceholder(false)
|
->selectablePlaceholder(false)
|
||||||
->default(fn (Server $server) => Node::whereNot('id', $server->node->id)->first()?->id)
|
->default(fn (Server $server) => user()?->accessibleNodes()->whereNot('id', $server->node->id)->first()?->id)
|
||||||
->required()
|
->required()
|
||||||
->live()
|
->live()
|
||||||
->options(fn (Server $server) => Node::whereNot('id', $server->node->id)->pluck('name', 'id')->all()),
|
->options(fn (Server $server) => user()?->accessibleNodes()->whereNot('id', $server->node->id)->pluck('name', 'id')->all()),
|
||||||
Select::make('allocation_id')
|
Select::make('allocation_id')
|
||||||
->label(trans('admin/server.primary_allocation'))
|
->label(trans('admin/server.primary_allocation'))
|
||||||
->disabled(fn (Get $get, Server $server) => !$get('node_id') || !$server->allocation_id)
|
->disabled(fn (Get $get, Server $server) => !$get('node_id') || !$server->allocation_id)
|
||||||
|
|||||||
@ -291,6 +291,7 @@ class User extends Model implements AuthenticatableContract, AuthorizableContrac
|
|||||||
->distinct('servers.id');
|
->distinct('servers.id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return Builder<Node> */
|
||||||
public function accessibleNodes(): Builder
|
public function accessibleNodes(): Builder
|
||||||
{
|
{
|
||||||
// Root admins can access all nodes
|
// Root admins can access all nodes
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user