본문으로 건너뛰기
가이드

Resource 만들기

Workshop에 Note를 추가하고 한 테넌트에서 생성·조회·수정합니다.

Resource 만들기

App 패키지 만들기에 Note를 추가합니다. 아래 명령은 실습 환경의 Core 루트에서 실행하세요. App이 먼저 생성되어 있어야 하며 API Route 그룹에 app.installed:workshop이 남아 있어야 합니다.

코드 예시
Shell
task artisan -- nexia-apps:make-package-resource workshop Note --record-owner=legal_entity --label-ko=노트 --label-zh=笔记 --dry-run
task artisan -- nexia-apps:make-package-resource workshop Note --record-owner=legal_entity --label-ko=노트 --label-zh=笔记
task artisan -- tenants:list --no-ansi

생성 예정 목록을 먼저 검토한 뒤 실제 명령을 실행합니다. tenants:list에서 실습 테넌트의 도메인이 아닌 ID를 찾아 아래 REPLACE_WITH_TENANT_ID를 바꾸세요. 빈 테넌트가 필요하면 App 개발 환경 준비의 Central 생성 절차를 사용합니다.

코드 예시
Shell
nexia_tenant=REPLACE_WITH_TENANT_ID

task artisan -- nexia-runtime:clear-translation-catalog-cache
task artisan -- nexia-apps:activate-package-app workshop
task artisan -- nexia-apps:install-dev-app workshop --tenant="$nexia_tenant" --dry-run
task artisan -- nexia-apps:install-dev-app workshop --tenant="$nexia_tenant" --with-prerequisites
task app:reload
docker compose restart vite
docker compose up --wait --no-deps vite

호스트 활성화 후 로컬 전용 개발 설치 명령을 실행합니다. 지정한 테넌트에 Workshop과 필수 선행 App의 마이그레이션·초기화를 적용한 뒤 활성화합니다. APP_ENV=local에서만 사용할 수 있고 --tenant는 필수입니다. Central 카탈로그에 등록하거나 게시하지 않아도 되며 패키지의 readiness도 바꾸지 않습니다. 사용자 권한은 별도로 설정합니다. 실패하면 원인을 수정한 뒤 같은 명령으로 재시도하세요. 운영 설치는 App 릴리스하기의 게시·설치 절차를 따릅니다.

테넌트 Shell에서 확인

Access Management에서 테스트 사용자의 App Role에 workshop.note.read, workshop.note.create, workshop.note.update를 넣고 대상 Legal Entity의 Access Grant를 배정합니다. App 설치만으로 사용자 권한이 생기지는 않습니다.

실습 테넌트에 로그인해 Workshop → 운영 → 노트를 엽니다. 새 노트에서 허용된 Legal Entity를 선택하고 이름을 저장하세요. 목록 행의 Inspector, 상세, 편집 화면도 열어 봅니다. 생성 상태는 draft이며 enum에는 active, archived도 있습니다. 삭제 Route는 생성되지만 기본 Policy는 삭제를 거부합니다. 실제 보존·감사 규칙을 정한 뒤 구현하세요.

기능별 수정 위치

아래는 Workshop 루트 기준 경로입니다.

경로역할
database/migrations/tenant/*_create_wsp_notes_table.php테넌트 테이블, UUID, 인덱스
src/Models/Note.php저장 필드, 목록 조건, 조회 범위
src/Enums/NoteStatus.php상태값과 번역 키
src/Http/Controllers/NoteController.php검증, 권한이 적용된 조회, 응답
src/Policies/NotePolicy.php동작 권한과 레코드 범위
src/Contribution/Resources/NoteModule.phpDescriptor, 권한, 메뉴, Shell 계약
resources/js/resources/notes/타입, 정보 schema, 화면, Section, Inspector
tests/Feature/NoteAuthorizationTest.php생성된 권한 선언 검사

생성기는 App Route, Manifest와 번역 파일도 갱신합니다. 등록용 marker를 지우지 마세요. 프런트엔드 진입점은 Resource Inspector를 자동 발견합니다. Overview의 내용은 App에서 직접 구성합니다.

기본 API 목록 경로는 /api/workshop/notes입니다. 목록은 legal_entity_public_ids[], 생성은 단일 legal_entity_public_id로 대상을 전달합니다. 상세·수정은 공개 UUID로 Note를 찾고 저장된 소유자를 복원합니다. Shell 전역 상태로 소유자를 결정하지 않습니다.

다른 Resource의 소유자 정하기

--record-owner대상조직 선택 UI
legal_entity (기본값)특정 Legal Entity가 소유한 기록페이지 목록 범위와 생성 대상 선택
tenant테넌트 공통 기준정보조직 선택기 없음

허용 값은 두 가지뿐입니다. 단일 설정이나 부모에 종속된 자식 행까지 모두 최상위 Resource로 만들 필요는 없습니다. 표준 프로필로 표현되지 않는 권한은 App에서 명시적으로 구현합니다.

Resource Module은 workshop.note 같은 고정 키, 공개 descriptor, 권한 계약과 메뉴를 선언합니다. publicForBuilder는 발견 참여 여부이며 접근 권한을 대신하지 않습니다. 내부 원장·시도 기록 등에는 false를 사용하세요. 전체 형식과 생성기 옵션은 Resource 계약에 있습니다.

첫 필드 추가하기

데이터 모델과 마이그레이션에서 category를 DB부터 검증·API·폼·목록까지 연결합니다. 구현 후 App 테스트하기에서 허용과 거부 요청을 확인하세요. Package doctor 성공은 연결 상태에 대한 결과이며 업무 동작의 증명은 아닙니다.

원본 위치: docs/developers/content/ko/building-apps/create-a-resource.md