mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-03 15:02:34 +00:00
API Feature (#334)
This commit is contained in:
@ -34,7 +34,7 @@ public static function getNavigationItemActiveRoutePattern(): string
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->authorize('viewAny', Server::class);
|
||||
$this->authorize('viewAny', [Server::class, auth()->user()->currentProject]);
|
||||
}
|
||||
|
||||
public function getWidgets(): array
|
||||
@ -50,6 +50,8 @@ protected function getHeaderActions(): array
|
||||
'public_key' => get_public_key_content(),
|
||||
]);
|
||||
|
||||
$project = auth()->user()->currentProject;
|
||||
|
||||
return [
|
||||
\Filament\Actions\Action::make('read-the-docs')
|
||||
->label('Read the Docs')
|
||||
@ -60,7 +62,7 @@ protected function getHeaderActions(): array
|
||||
\Filament\Actions\Action::make('create')
|
||||
->label('Create a Server')
|
||||
->icon('heroicon-o-plus')
|
||||
->authorize('create', Server::class)
|
||||
->authorize('create', [Server::class, auth()->user()->currentProject])
|
||||
->modalWidth(MaxWidth::FiveExtraLarge)
|
||||
->slideOver()
|
||||
->form([
|
||||
@ -74,7 +76,7 @@ protected function getHeaderActions(): array
|
||||
$set('region', null);
|
||||
$set('plan', null);
|
||||
})
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['provider']),
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['provider']),
|
||||
AlertField::make('alert')
|
||||
->warning()
|
||||
->message(__('servers.create.public_key_warning'))
|
||||
@ -82,7 +84,7 @@ protected function getHeaderActions(): array
|
||||
Select::make('server_provider')
|
||||
->visible(fn ($get) => $get('provider') !== ServerProvider::CUSTOM)
|
||||
->label('Server provider connection')
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['server_provider'])
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['server_provider'])
|
||||
->options(function ($get) {
|
||||
return \App\Models\ServerProvider::getByProjectId(auth()->user()->current_project_id)
|
||||
->where('provider', $get('provider'))
|
||||
@ -109,7 +111,7 @@ protected function getHeaderActions(): array
|
||||
->schema([
|
||||
Select::make('region')
|
||||
->label('Region')
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['region'])
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['region'])
|
||||
->live()
|
||||
->reactive()
|
||||
->options(function ($get) {
|
||||
@ -125,7 +127,7 @@ protected function getHeaderActions(): array
|
||||
->searchable(),
|
||||
Select::make('plan')
|
||||
->label('Plan')
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['plan'])
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['plan'])
|
||||
->reactive()
|
||||
->options(function ($get) {
|
||||
if (! $get('server_provider') || ! $get('region')) {
|
||||
@ -162,15 +164,15 @@ protected function getHeaderActions(): array
|
||||
->visible(fn ($get) => $get('provider') === ServerProvider::CUSTOM),
|
||||
TextInput::make('name')
|
||||
->label('Name')
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['name']),
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['name']),
|
||||
Grid::make()
|
||||
->schema([
|
||||
TextInput::make('ip')
|
||||
->label('SSH IP Address')
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['ip']),
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['ip']),
|
||||
TextInput::make('port')
|
||||
->label('SSH Port')
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['port']),
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['port']),
|
||||
])
|
||||
->visible(fn ($get) => $get('provider') === ServerProvider::CUSTOM),
|
||||
Grid::make()
|
||||
@ -178,7 +180,7 @@ protected function getHeaderActions(): array
|
||||
Select::make('os')
|
||||
->label('OS')
|
||||
->native(false)
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['os'])
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['os'])
|
||||
->options(
|
||||
collect(config('core.operating_systems'))
|
||||
->mapWithKeys(fn ($value) => [$value => $value])
|
||||
@ -187,7 +189,7 @@ protected function getHeaderActions(): array
|
||||
->label('Server Type')
|
||||
->native(false)
|
||||
->selectablePlaceholder(false)
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['type'])
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['type'])
|
||||
->options(
|
||||
collect(config('core.server_types'))
|
||||
->mapWithKeys(fn ($value) => [$value => $value])
|
||||
@ -200,7 +202,7 @@ protected function getHeaderActions(): array
|
||||
->label('Webserver')
|
||||
->native(false)
|
||||
->selectablePlaceholder(false)
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['webserver'] ?? [])
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['webserver'] ?? [])
|
||||
->options(
|
||||
collect(config('core.webservers'))->mapWithKeys(fn ($value) => [$value => $value])
|
||||
),
|
||||
@ -208,7 +210,7 @@ protected function getHeaderActions(): array
|
||||
->label('Database')
|
||||
->native(false)
|
||||
->selectablePlaceholder(false)
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['database'] ?? [])
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['database'] ?? [])
|
||||
->options(
|
||||
collect(config('core.databases_name'))
|
||||
->mapWithKeys(fn ($value, $key) => [
|
||||
@ -219,7 +221,7 @@ protected function getHeaderActions(): array
|
||||
->label('PHP')
|
||||
->native(false)
|
||||
->selectablePlaceholder(false)
|
||||
->rules(fn ($get) => CreateServerAction::rules($get())['php'] ?? [])
|
||||
->rules(fn ($get) => CreateServerAction::rules($project, $get())['php'] ?? [])
|
||||
->options(
|
||||
collect(config('core.php_versions'))
|
||||
->mapWithKeys(fn ($value) => [$value => $value])
|
||||
@ -229,7 +231,7 @@ protected function getHeaderActions(): array
|
||||
->modalSubmitActionLabel('Create')
|
||||
->action(function (array $data) {
|
||||
run_action($this, function () use ($data) {
|
||||
$server = app(CreateServerAction::class)->create(auth()->user(), $data);
|
||||
$server = app(CreateServerAction::class)->create(auth()->user(), auth()->user()->currentProject, $data);
|
||||
|
||||
$this->redirect(View::getUrl(['server' => $server]));
|
||||
});
|
||||
|
@ -8,7 +8,6 @@
|
||||
use Exception;
|
||||
use Filament\Forms\Components\DatePicker;
|
||||
use Filament\Tables\Actions\Action;
|
||||
use Filament\Tables\Actions\BulkActionGroup;
|
||||
use Filament\Tables\Actions\DeleteAction;
|
||||
use Filament\Tables\Actions\DeleteBulkAction;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
@ -115,12 +114,10 @@ public function getTable(): Table
|
||||
->color('danger')
|
||||
->authorize(fn ($record) => auth()->user()->can('delete', $record)),
|
||||
])
|
||||
->bulkActions(
|
||||
BulkActionGroup::make([
|
||||
DeleteBulkAction::make()
|
||||
->requiresConfirmation()
|
||||
->authorize(auth()->user()->can('deleteMany', [ServerLog::class, $this->server])),
|
||||
])
|
||||
);
|
||||
->bulkActions([
|
||||
DeleteBulkAction::make()
|
||||
->requiresConfirmation()
|
||||
->authorize(auth()->user()->can('deleteMany', [ServerLog::class, $this->server])),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ class Settings extends Page
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->authorize('update', $this->server);
|
||||
$this->authorize('update', [$this->server, auth()->user()->currentProject]);
|
||||
}
|
||||
|
||||
public function getWidgets(): array
|
||||
@ -45,6 +45,7 @@ protected function getHeaderActions(): array
|
||||
->requiresConfirmation()
|
||||
->modalHeading('Delete Server')
|
||||
->modalDescription('Once your server is deleted, all of its resources and data will be permanently deleted and can\'t be restored')
|
||||
->authorize('delete', $this->server)
|
||||
->action(function () {
|
||||
try {
|
||||
$this->server->delete();
|
||||
|
@ -18,7 +18,7 @@ class View extends Page
|
||||
|
||||
public function mount(): void
|
||||
{
|
||||
$this->authorize('view', $this->server);
|
||||
$this->authorize('view', [$this->server, auth()->user()->currentProject]);
|
||||
$this->previousStatus = $this->server->status;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user