args[0] ?? 'create'; return match($validationType) { 'create' => $this->validateCreate($data), 'update' => $this->validateUpdate($data), 'status' => $this->validateStatus($value), 'scopes' => $this->validateScopes($value), 'auth_type' => $this->validateAuthType($value), 'callback_url' => $this->validateCallbackUrl($value), 'app_id_unique' => $this->validateAppIdUnique($value), default => false, }; } /** * 验证创建应用数据 * * @param array $data * @return bool */ protected function validateCreate(array $data): bool { // 验证必填字段 $requiredFields = ['name', 'description', 'callback_url']; foreach ($requiredFields as $field) { if (empty($data[$field])) { $this->addError("字段 {$field} 不能为空"); return false; } } // 验证应用名称长度 if (strlen($data['name']) > 255) { $this->addError('应用名称不能超过255个字符'); return false; } // 验证描述长度 if (strlen($data['description']) > 1000) { $this->addError('应用描述不能超过1000个字符'); return false; } // 验证回调地址 if (!$this->validateCallbackUrl($data['callback_url'])) { return false; } // 验证权限范围 if (isset($data['scopes']) && !$this->validateScopes($data['scopes'])) { return false; } // 验证认证类型 if (isset($data['auth_type']) && !$this->validateAuthType($data['auth_type'])) { return false; } return true; } /** * 验证更新应用数据 * * @param array $data * @return bool */ protected function validateUpdate(array $data): bool { // 验证应用名称 if (isset($data['name'])) { if (empty($data['name'])) { $this->addError('应用名称不能为空'); return false; } if (strlen($data['name']) > 255) { $this->addError('应用名称不能超过255个字符'); return false; } } // 验证描述 if (isset($data['description']) && strlen($data['description']) > 1000) { $this->addError('应用描述不能超过1000个字符'); return false; } // 验证回调地址 if (isset($data['callback_url']) && !$this->validateCallbackUrl($data['callback_url'])) { return false; } // 验证权限范围 if (isset($data['scopes']) && !$this->validateScopes($data['scopes'])) { return false; } // 验证认证类型 if (isset($data['auth_type']) && !$this->validateAuthType($data['auth_type'])) { return false; } // 验证状态 if (isset($data['status']) && !$this->validateStatus($data['status'])) { return false; } return true; } /** * 验证应用状态 * * @param string $status * @return bool */ protected function validateStatus(string $status): bool { $validStatuses = array_column(APP_STATUS::cases(), 'value'); if (!in_array($status, $validStatuses)) { $this->addError("无效的应用状态: {$status}"); return false; } return true; } /** * 验证权限范围 * * @param array $scopes * @return bool */ protected function validateScopes(array $scopes): bool { if (empty($scopes)) { $this->addError('权限范围不能为空'); return false; } $validScopes = array_column(SCOPE_TYPE::cases(), 'value'); foreach ($scopes as $scope) { if (!in_array($scope, $validScopes)) { $this->addError("无效的权限范围: {$scope}"); return false; } } return true; } /** * 验证认证类型 * * @param string $authType * @return bool */ protected function validateAuthType(string $authType): bool { $validAuthTypes = array_column(AUTH_TYPE::cases(), 'value'); if (!in_array($authType, $validAuthTypes)) { $this->addError("无效的认证类型: {$authType}"); return false; } return true; } /** * 验证回调地址 * * @param string $url * @return bool */ protected function validateCallbackUrl(string $url): bool { if (empty($url)) { $this->addError('回调地址不能为空'); return false; } // 验证URL格式 if (!filter_var($url, FILTER_VALIDATE_URL)) { $this->addError('回调地址格式不正确'); return false; } // 验证协议 $scheme = parse_url($url, PHP_URL_SCHEME); if (!in_array($scheme, ['http', 'https'])) { $this->addError('回调地址必须使用HTTP或HTTPS协议'); return false; } // 验证长度 if (strlen($url) > 500) { $this->addError('回调地址不能超过500个字符'); return false; } return true; } /** * 验证应用ID唯一性 * * @param string $appId * @return bool */ protected function validateAppIdUnique(string $appId): bool { $exists = OpenApiApp::where('app_id', $appId)->exists(); if ($exists) { $this->addError("应用ID {$appId} 已存在"); return false; } return true; } }