$input * @return DatabaseUser $databaseUser * * @throws ValidationException */ public function link(DatabaseUser $databaseUser, array $input): DatabaseUser { if (! isset($input['databases']) || ! is_array($input['databases'])) { $input['databases'] = []; } $dbs = Database::query() ->where('server_id', $databaseUser->server_id) ->whereIn('name', $input['databases']) ->count(); if (count($input['databases']) !== $dbs) { throw ValidationException::withMessages(['databases' => __('Databases not found!')]); } $databaseUser->databases = $input['databases']; /** @var Service $service */ $service = $databaseUser->server->database(); /** @var \App\SSH\Services\Database\Database $handler */ $handler = $service->handler(); // Unlink the user from all databases $handler->unlink( $databaseUser->username, $databaseUser->host ); // Link the user to the selected databases $handler->link( $databaseUser->username, $databaseUser->host, $databaseUser->databases ); $databaseUser->save(); $databaseUser->refresh(); return $databaseUser; } /** * @param array $input * @return array */ public static function rules(Server $server, array $input): array { return [ 'databases.*' => [ 'nullable', Rule::exists('databases', 'name')->where('server_id', $server->id), ], ]; } }