리소스 데이터 가져오기·내보내기
전송 컬럼·조회 범위·입력 검증·가져오기 결과를 확인합니다.
리소스 데이터 가져오기·내보내기
개발 데이터 만들기의 테넌트 소유 Example로 시작합니다. 일반 생성에 이름만 필요한 모델입니다. 조직 소유 리소스는 별도의 대상 검증이 필요합니다.
허용 컬럼 선언
src/Models/Example.php에 다음 import와 멤버를 추가하세요. 생성된 모델 전체를 교체하지 않습니다:
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Builder;
use Nexia\Laravel\ResourceTransfer\Concerns\ExportImportable;
use Nexia\ResourceTransfer\TransferSchema;
// Add inside the generated tenant-owned Example model; retain its other traits.
use ExportImportable;
public static function transferColumns(TransferSchema $schema): TransferSchema
{
return $schema->field('name', 'workshop.example.name.label', required: true);
}
public static function transferExportQuery(?Authenticatable $actor = null): Builder
{
abort_if($actor === null, 403);
return static::query()->visibleTo($actor);
}기본 전송 범위는 테넌트입니다. 생성된 Controller의 meta.resource_transfer와 목록의 전송 연결을 유지하세요. 파일 형식 처리는 호스트가, 앱 데이터 처리는 앱이 담당합니다. 숫자 키·테넌트 ID·비밀값·다른 앱 필드를 수정 가능한 컬럼으로 노출하지 않습니다.
목록에서 확인
- 프로젝트
nexia dev로 동기화합니다. - 테스트 사용자에게 테넌트 범위
system.data.export·system.data.import와 Example 조회·생성 권한을 부여합니다. - Examples에서 소량을 내보내고 목록과 비교합니다. Policy로 숨긴 레코드가 파일에도 없어야 합니다.
- 화면에서 제공하는 가져오기 양식을 내려받고 예제 이름 하나를 넣습니다. 미리보기·실행 후 목록과 행별 결과를 확인합니다.
- 필수 이름 누락·권한 없는 사용자·중복 입력을 확인합니다. 가져오기는 생성 전용이며 upsert가 아닙니다.
TransferSchema::key()로 선언한 필드는 중복 판단에 사용합니다. 위 예제의name은 고유값으로 선언하지 않았습니다.
모델 선언의 기본 한도는 내보내기 10,000행·가져오기 1,000행입니다. 실제 한도와 형식은 응답 metadata를 확인하세요. 일부 행 성공은 전체 업무의 단일 트랜잭션 성공이 아닙니다. 행별 결과를 보고 수정합니다.
업무 규칙 유지
createFromImport(array $attributes)는 앱이 소유하는 생성 hook입니다. 검증·파생값·연관 쓰기가 필요하면 재정의해 API와 같은 업무 로직을 호출하세요. 기본 구현은 모델을 바로 생성하므로 HTTP Request에만 작성한 검증이 자동 실행되지는 않습니다.
법인 소유 모델은 transferScope()를 self::TRANSFER_SCOPE_LEGAL_ENTITY로 지정하고, transferExportQuery()를 허용 레코드로 제한하며, 가져올 레코드의 소유자는 신뢰된 범위에서 구해야 합니다. 파일의 임의 조직 ID를 믿지 말고 조직 간 접근을 검증한 뒤 기능을 공개하세요.
TransferSchema는 field·key·참조·내보내기 제한을 제공합니다. 사용자 정의 내보내기는 SDK ResourceTransferExportSourceContribution과 ResourceTransferExportSource 계약을 구현하며 조회 권한 검사가 여전히 필요합니다. 정확한 인자 형태는 설치된 SDK 정의에서 확인합니다.