PortalConsole–ProcessCenter 권한·인증 연동
현재 인증 경계
ProcessCenter는 PortalConsole 로그인 콜백으로 발급된 process_center_directory_session HttpOnly 쿠키를 사용한다. ProcessCenter의 protectedProcedure는 이 쿠키를 검증한 사용자만 통과시킨다. 쿠키에는 portalId=process-center가 포함되며, 다른 포탈 세션의 재사용을 차단한다.
PortalConsole 로그인
→ ProcessCenter callback
→ process_center_directory_session(HttpOnly)
→ ProcessCenter 서버 세션 검증
→ tRPC protectedProcedure
→ 프로세스 업무 권한 확인
→ FileStore 서버 API 호출FileStore 서비스 토큰은 이 세션 쿠키와 별개이며 ProcessCenter 서버에서만 보관한다. 브라우저와 PortalConsole 사용자 세션에는 FileStore 토큰을 넣지 않는다.
권한 처리 순서
첨부파일 업로드와 삭제는 다음 순서로 처리한다.
- ProcessCenter가 PortalConsole 세션에서 사용자를 확인한다.
- ProcessCenter가 프로세스 노드에 대한 R 담당자 또는 관리자 권한을 확인한다.
- 권한을 통과한 경우에만 FileStore API를 호출한다.
- FileStore가
consumerId,mappingId, Backend 활성 상태, 파일 정책을 최종 검증한다. - 실패 시 ProcessCenter는 내부 토큰과 저장소 정보를 노출하지 않는다.
다운로드 목록도 인증된 tRPC 요청에서만 조회한다. 브라우저에는 ProcessCenter 자신의 same-origin 다운로드 경로만 주고, 원본은 서버가 FileStore read-url 로 받아 중계한다(server/processAttachmentEndpoint.ts) — 서명 URL·서비스 토큰은 브라우저에 나가지 않는다. FileStore 오리진을 브라우저가 직접 호출하면 CORS에 막히므로(업로드는 서버 경유라 성공, 다운로드만 실패하는 원인) 기본은 중계다.
프론트엔드 상태 처리
첨부파일 UI는 다음 상태를 표시한다.
| 상태 | UI 동작 |
|---|---|
| 목록 로딩 | 목록 영역에 로딩 표시 |
| 목록 권한·연동 오류 | 권한 또는 FileStore 연결 확인 메시지 표시 |
| 업로드 중 | 파일 추가 버튼 비활성화 및 spinner 표시 |
| 다운로드 중 | 해당 파일의 다운로드 버튼만 spinner 표시 |
| 삭제 중 | 해당 파일의 삭제 버튼만 spinner 표시 |
| 성공 | 성공 toast와 목록 갱신 |
| 실패 | 서버 메시지를 표시하되 비밀정보는 표시하지 않음 |
다음 연계 작업
PortalConsole가 업무 권한을 중앙 판정하는 단계에서는 ProcessCenter가 자체 RACI 판정을 대체하지 않고 PortalConsole 권한 확인을 추가한다. 최종 허용 조건은 다음과 같다.
PortalConsole 포탈·조직·사용자 권한
AND
ProcessCenter 프로세스 업무 권한
AND
FileStore 저장 정책PortalConsole 권한 API가 확정되면 ProcessCenter 서버에 canUpload, canDownload, canDelete 확인 클라이언트를 추가한다. 브라우저가 PortalConsole 권한 API를 직접 호출하지 않도록 한다.