Cloudwiki

Cloudwiki/기능/편집 요청

정보:
ACL 조건을 충족하지 못하는 사용자의 편집을 즉시 반영하지 않고 **편집 요청** 으로 보류했다가, 검토자가 문서 화면에서 승인·반려하는 기능을 설명합니다. 활성화 여부는 배포 설정으로 정해지며, 켜져 있을 때만 동작합니다.


# 개요

**편집 요청** 은 문서의 편집 ACL([[Cloudwiki/기능/ACL]]) 조건을 충족하지 못하는 사용자도 편집을 **제안** 할 수 있게 하되, 그 편집을 즉시 공개 문서에 반영하지 않고 검토 대기 상태로 보류하는 기능입니다. 보류된 편집은 검토 권한이 있는 사용자(관리자 또는 신뢰 사용자)가 문서 화면에서 **승인** 하거나 **반려** 합니다.

| 상태 | 의미 |
| --- | --- |
| 제출 | ACL 미달 사용자가 편집을 저장하면 리비전 대신 편집 요청으로 보류됨 |
| 승인 | 검토자가 승인하면 **요청자 명의** 의 정식 리비전으로 반영됨 |
| 반려 | 검토자가 사유와 함께 폐기하며, 요청자에게 알림이 감 |

승인 전까지 공개 문서에는 마지막으로 승인된 본문만 표시되므로, 편집 요청이 쌓여도 문서가 훼손되지 않습니다.

# 활성화 조건

편집 요청은 **배포 설정** 으로 켜고 끄며, 관리자 페이지에서 토글할 수 없습니다. 두 조건이 모두 충족돼야 동작합니다.

- 배포 설정 `EDIT_REQUEST_ENABLED` 이 `"true"` 일 것 (`wrangler.toml`)
- 전역 설정 **가입 N일 이상** 기준일(`edit_acl_min_age_days`)이 0보다 클 것

기준일이 0이면 모든 사용자가 가입 즉시 `aged`(신뢰 사용자)로 통과해 보류가 발생하지 않습니다. 따라서 편집 요청을 쓰려면 관리자 설정에서 이 값을 1 이상으로 두어야 합니다.

# 편집 요청 제출 (요청자)

편집 요청이 켜져 있으면, ACL 조건을 충족하지 못하는 로그인 사용자도 문서 보기 화면의  **편집** 버튼을 그대로 사용할 수 있습니다. 단, **관리자 전용 잠금**(`admin_only`) 또는 **비공개** 문서는 제외됩니다.

평소처럼 편집하고 저장하면 곧바로 리비전이 생성되는 대신 **편집 요청이 제출되었습니다** 안내가 표시되고, 문서 보기 화면(마지막 승인본)으로 돌아갑니다. 제출된 편집은 검토자가 승인하기 전까지 공개 문서에 나타나지 않습니다.

>  한 사용자는 같은 문서에 하나의 편집 요청만 가질 수 있습니다. 다시 제출하면 이전 요청이 최신 내용으로 교체됩니다.

# 검토 (검토자)

## 누가 검토하나

- **관리자** — 모든 문서의 편집 요청
- **가입 N일 이상(aged) 사용자** — 모든 문서의 편집 요청
- 그 외 신뢰 사용자 — 자신이 이전에 **편집한 적 있는 문서** 의 편집 요청

자신이 올린 편집 요청은 본인이 검토할 수 없습니다.

## 검토 진입점

검토 가능한 편집 요청이 있는 문서를 열면 다음 위치에 표시됩니다.

- 편집 버튼이 **드롭다운** 으로 바뀌며 하늘색 배지(건수)가 붙습니다. 드롭다운에서  **문서 편집하기** /  **편집 요청 확인하기** 를 고를 수 있습니다.
- 본문 상단에 **검토 대기 중인 편집 요청이 N건 있습니다** 배너가 함께 표시됩니다.
- 아직 만들어지지 않은 새 문서 요청은 **문서 없음** 화면에서, 삭제된 문서로 인한 요청은 **삭제됨** 화면에서 같은 배너로 노출됩니다.

**편집 요청 확인하기** 를 누르면 변경 내용을 **diff(비교)** 로 보여주는 검토 창이 열립니다. 한 문서에 여러 요청이 있으면 작성자를 먼저 고릅니다.

## 검토 동작

검토 창에서는 세 가지 동작을 할 수 있습니다.

| 동작 | 결과 |
| --- | --- |
|  승인 | 요청 내용을 **요청자 명의** 리비전으로 반영 |
|  반려 | 사유와 함께 요청을 폐기하고 요청자에게 알림 |
|  에디터에서 편집 | 요청 내용을 에디터로 불러와 **추가 편집·병합** 후 승인 |

# 승인 결과

승인하면 편집 요청은 **원래 요청자 명의** 의 정식 리비전이 되어 공개됩니다. 편집 요약 끝에는 누가 승인했는지 `(요청 승인 : [닉네임|id])` 형태로 자동으로 박제됩니다.

검토자가 **에디터에서 편집** 으로 요청 내용을 추가로 손본 뒤 승인하면 리비전이 **두 개** 만들어집니다.

1. 원래 요청분 — **요청자** 명의 (요약에 `요청 승인` 박제)
2. 검토자가 추가한 편집분 — **검토자** 명의

이렇게 하면 요청자의 기여와 검토자의 보완이 편집 이력에 각각 남습니다.

# 반려

반려할 때는 **반려 사유** 를 입력할 수 있으며(선택), 사유는 요청자에게 가는 알림에 함께 전달됩니다. 반려된 요청은 폐기되어 복구되지 않습니다.

# 충돌 처리

검토자가 검토를 시작한 뒤 다른 사람이 같은 문서를 수정하면, 그대로 승인할 경우 그 편집이 사라질 수 있습니다. 이를 막기 위해 다음과 같이 동작합니다.

- **직접 승인** 시 충돌이 감지되면 승인이 막히고, **에디터에서 편집** 으로 최신 본문에 병합하도록 안내합니다.
- 에디터에서 병합하는 도중 다시 다른 편집이 끼어들면 문서를 승인 직전 상태로 되돌리고 **다시 병합** 하도록 안내합니다.

# 알림

- 편집 요청이 제출되면 관리자에게 인앱·푸시 알림이 갑니다.
- 승인·반려 결과는 요청자에게 알림으로 전달됩니다(반려 시 사유 포함).

# 주의 사항

- 편집 요청은 ACL을 **대체** 하지 않습니다. 관리자 전용 잠금·비공개 문서에는 적용되지 않으며, 이런 문서는 여전히 권한 있는 사용자만 편집·열람할 수 있습니다([[Cloudwiki/기능/ACL]]).
- 기능이 꺼지면(`EDIT_REQUEST_ENABLED` 미설정 또는 `"false"`) 남아 있던 편집 요청도 목록·검토에서 보이지 않으며 승인·반려할 수 없습니다.
- 누가 신뢰 사용자로 통과하는지는 **가입 N일 이상** 기준일과 문서 편집 이력으로 정해집니다(자세한 조건은 [[Cloudwiki/기능/ACL]] 참고).