The official Doconut 기능 카탈로그에서는 브라우저 인쇄와 PDF 내보내기를 뷰어 기능으로 나열합니다. 이에 대한 접근을 제어하려면 여전히 두 가지 별도 결정을 내려야 합니다: Doconut이 해당 작업을 표시할지 여부와 호스트 애플리케이션이 현재 사용자와 문서에 대해 해당 작업을 허가할지 여부.

설치된 빌드에서 지원되는 정확한 제어 항목을 확인하려면 Doconut 문서와 공식 Doconut 다운로드 페이지에서 제공되는 패키지 샘플부터 시작하십시오. 관련 없는 버전이나 검증되지 않은 기사에서 구성 키나 소스 코드를 복사하지 마세요.
1. 인쇄 정책 먼저 정의하기
툴바를 변경하기 전에 누가 인쇄할 수 있는지와 어떤 조건에서 가능한지 적어 두세요. 유용한 정책은 다음과 같은 질문에 답합니다:
- 모든 뷰어, 특정 역할만, 혹은 특정 문서에 대해 인쇄가 허용됩니까?
- 결정이 테넌트, 케이스 상태, 문서 분류 또는 만료 여부에 따라 달라집니까?
- 인쇄 가능한 출력에 워터마크가 필요합니까?
- 인쇄 이벤트를 감사해야 합니까?
- 사용자가 오래된 문서 개정을 인쇄할 수 있습니까?
- 미리보기가 열려 있는 동안 권한이 변경되면 어떻게 해야 합니까?
실제 규칙이 상황에 따라 달라지는 경우 단일 전역 Boolean을 피하십시오. 인쇄를 별도의 작업으로 모델링하여 보기 및 다운로드와 독립적으로 권한을 부여할 수 있도록 합니다.
2. UI 상태와 권한을 분리하기
호스트 페이지는 애플리케이션 소유 권한 결과를 받은 후 인쇄 컨트롤을 표시할지 여부를 결정할 수 있습니다. 이는 인쇄할 수 없는 사용자에게 명확성을 높여 줍니다.
하지만 컨트롤을 숨기는 것은 권한 경계가 아닙니다. 사용자는 여전히 알려진 엔드포인트를 직접 호출하거나 이전 요청을 재생하거나 보이는 콘텐츠에 대해 브라우저 인쇄를 실행할 수 있습니다. 인쇄 가능한 출력을 생성하는 모든 서버 라우트는 동일한 정책을 적용해야 합니다.
UI에서 구분된 상태를 사용하십시오:
| 상태 | 뷰어 동작 | 서버 동작 |
|---|---|---|
| 인쇄 허용 | 지원되는 인쇄 작업 표시 | 요청된 출력을 권한 부여하고 생성 |
| 인쇄 거부 | 명확한 설명과 함께 작업을 숨기거나 비활성화 | 금지 응답 반환 |
| 정책 알 수 없음 | 권한 로드 중 작업을 사용할 수 없게 유지 | 출력 생성 안 함 |
| 세션 만료 | 사용자에게 재인증 요청 | 오래된 요청 거부 |
3. 인쇄 엔드포인트 보호하기
인쇄를 호출하거나 인쇄 가능한 출력을 반환하는 애플리케이션 작업을 보호하십시오. 권한 결정은 테넌트 멤버십, 소유권, 분류, 워크플로 상태 및 문서 개정을 고려해야 합니다. 클라이언트가 제공한 경로나 저장소 URL을 받아들이는 대신 서버에서 문서를 해결하십시오.
애플리케이션이 PDF를 생성하는 대신 뷰어 전용 라우트를 통해 인쇄한다면, 해당 라우트를 호출하기 전에 동일한 권한을 적용하십시오.
4. 설치된 뷰어 버전 구성하기
서버 규칙이 존재하면, 패키지와 버전과 함께 제공되는 샘플 파일에 문서화된 정확한 옵션을 사용하여 Doconut UI를 구성하십시오. Doconut 라이브 데모를 통해 특정 통합을 결정하기 전에 지원되는 뷰어 동작을 확인할 수 있습니다. 확인하십시오:
- 옵션이 설정되는 위치: 서버 구성, 뷰 모델 또는 클라이언트 초기화.
- 툴바 항목을 숨기거나, 작업을 비활성화하거나, 생성된 출력에 영향을 주는지 여부.
- 값이 뷰어 인스턴스별로 적용되는지 전역적으로 적용되는지 여부.
- 인쇄와 내보내기가 별개의 작업인지 여부.
- 업데이트로 옵션 이름이나 기본값이 변경되었는지 여부.
공식 샘플을 사실상의 기준으로 삼으십시오. 그럴듯한 속성 이름만으로는 설치된 뷰어가 이를 인식한다는 충분한 증거가 되지 않습니다.
5. 브라우저 인쇄를 정직하게 처리하기
뷰어 설정만으로는 표시된 정보가 절대 인쇄되거나 캡처되지 않을 것을 보장할 수 없습니다. 브라우저는 호스트 페이지를 인쇄할 수 있으며, 사용자는 스크린샷이나 사진을 찍을 수 있습니다. 키보드 가로채기와 인쇄 전용 CSS는 기대되는 경험을 개선할 수 있지만, 클라이언트 측에서 우회될 수 있는 조치입니다.
호스트 페이지가 유용한 종이 사본을 만들지 않아야 한다면, 애플리케이션은 자체 인쇄 전용 프레젠테이션을 사용하여 미리보기를 설명 메시지로 대체할 수 있습니다. 해당 호스트 페이지 동작을 Doconut의 문서화된 뷰어 제어와는 별도로 유지하십시오.
이를 문서 보호라고 설명하지 마십시오. 위험 평가에서 보다 강력한 억제가 필요하다고 판단될 경우 서버 측 렌더링, 권한 부여, 제어된 내보내기 및 눈에 보이는 워터마크를 사용하십시오.
6. 다운로드, 내보내기 및 인쇄를 분리하기
사용자와 개발자는 종종 이를 하나의 “읽기 전용” 스위치로 취급하지만, 실제로는 서로 다른 데이터 흐름을 나타냅니다:
- View 표시된 콘텐츠를 렌더링해서 보여줍니다.
- Download 원본 또는 다른 저장 파일을 반환합니다.
- Export 파생 형식을 생성합니다.
- Print 인쇄 가능한 표현을 만들거나 브라우저 인쇄를 호출합니다.
각 작업을 명시적으로 권한 부여하십시오. 인쇄 권한이 없는 사용자가 다운로드는 허용될 수 있으며, 그 반대도 마찬가지입니다. 툴바는 서버의 결정을 반영해야 하며, 이를 정의해서는 안 됩니다.
7. 유용한 감사 이벤트 추가하기
인쇄가 민감한 경우, 문서 자체를 로그에 남기지 않고 결정을 기록하십시오. 이벤트에는 사용자, 테넌트, 문서 식별자, 리비전, 정책 결과, 타임스탬프 및 상관 관계 ID가 포함될 수 있습니다.
성공 및 거부된 시도 모두를 기록하십시오. 인쇄 서비스가 임시 파일을 생성한다면, 해당 파일의 정리 여부도 기록하십시오. 파일 경로, 토큰, 개인 데이터가 포함된 문서 제목 및 인쇄 가능한 콘텐츠는 일반 로그에 남기지 않도록 합니다.
8. 버튼이 없음을 넘어 테스트하기
툴바는 첫 번째 검증에 불과합니다. 전체 작업에 대한 테스트를 추가하십시오:
권한이 있는 사용자
- 의도된 인쇄 작업이 표시됩니다.
- 허용된 문서에 대해 인쇄 요청이 성공합니다.
- 올바른 리비전이 사용됩니다.
- 생성된 출력에 필수 표시가 나타납니다.
- 감사 이벤트가 성공을 기록합니다.
권한이 없는 사용자
- 해당 작업이 없거나 비활성화됩니다.
- 인쇄 라우트에 대한 직접 요청이 금지 응답을 반환합니다.
- 문서 ID를 변경해도 규칙을 우회할 수 없습니다.
- 권한이 있는 세션에서 복사한 URL은 부적절하게 재사용될 수 없습니다.
- 거부 응답이 다른 테넌트가 문서를 소유하고 있는지 밝히지 않습니다.
상태 변화
- 세션 중에 권한이 회수되면 다음 인쇄 요청에서 적용됩니다.
- 만료된 세션은 인쇄할 수 없습니다.
- 삭제되었거나 대체된 문서는 제어된 오류를 발생시킵니다.
- 임시 인쇄 출력은 설정된 보존 규칙을 따릅니다.
브라우저 자동화를 통해 표시 상태와 응답 코드를 검증할 수 있습니다. 통합 테스트는 정책 평가와 문서 수준 권한 부여를 독립적으로 검증해야 합니다.
일반 질문
인쇄 버튼을 숨기는 것이 브라우저의 인쇄 단축키를 차단하나요?
아니요. 이는 설치된 뷰어가 해당 동작을 구현한 경우에만 의도된 뷰어 작업을 제거합니다. 브라우저 인쇄와 화면 캡처는 별도로 고려해야 하며, 클라이언트 측 코드만으로 완전히 방지할 수 없습니다.
인쇄 권한을 뷰잉 URL에 포함시켜야 할까요?
인증된 사용자, 문서 및 작업에 연결된 서버 측 권한 부여 결정을 선호하십시오. 임시 참조가 권한을 포함한다면 범위를 좁게 설정하고, 로그와 리퍼러로부터 보호하며, 민감한 작업을 재검증하십시오.
기밀 문서에 대해 인쇄 비활성화만으로 충분한가요?
아니요. 이는 사용성 또는 억제 제어 중 하나에 불과합니다. 기밀 워크플로에는 저장소 보호, 객체 수준 권한 부여, 제어된 내보내기, 보존 규칙, 모니터링 및 허용된 잔여 위험 모델도 필요합니다.
결론
신뢰할 수 있는 Doconut 인쇄 제어 구현은 서버에서 시작해 인터페이스에서 끝납니다. 정책을 정의하고, 작업을 보호하며, 설치된 뷰어에 대해 문서화된 옵션만 구성하고, 결과를 사용자에게 설명하고, 직접 요청과 툴바 가시성을 모두 테스트하십시오. 제품 코드를 기사에 재구성하기보다 공식 기능 페이지, 문서, 다운로드 및 데모를 구현 소스로 활용하십시오.