user()?->can('manage', Integration::class) ?? false; } public function rules(): array { $instance = $this->route('integration_instance'); $code = $instance?->integration_code ?? $this->input('integration_code'); $integration = is_string($code) ? Integration::where('integration_code', $code)->first() : null; $rules = [ 'integration_code' => $instance ? ['prohibited'] : ['required', 'string', 'exists:integrations,integration_code'], 'name' => [$instance ? 'sometimes' : 'required', 'required', 'string', 'max:255'], // PUT/PATCH replaces the complete credential object when supplied. 'integration_data' => [$instance ? 'sometimes' : 'present', 'array'], ]; if (! $instance || $this->exists('integration_data')) { foreach ($integration?->integration_data_schema ?? [] as $field => $rule) { $rules['integration_data.'.$field] = $rule; } } return $rules; } }