
# 권한 수정

`PATCH /v1/permissions/{permission_id}` · 권한 `apis:write`

JSON 병합 패치(RFC 7396, `application/merge-patch+json`)로 권한을 수정합니다. 보낸 필드만 바뀌고 나머지는 그대로 유지됩니다. 권한에는 버전이 없으므로 `If-Match`가 없습니다.

## 요청

| 매개변수 | 위치 | 설명 |
|---|---|---|
| `permission_id` | path | 권한 ID(`perm_…`). |

본문: 아래 필드 중 하나 이상(모두 선택 사항, 최소 하나 필요).

| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
| `value` | 문자열 | 아니요 | 현재 값과 같을 때만 허용됩니다. 값은 절대 바뀌지 않습니다. |
| `display_name` | 문자열 \| null | 아니요 | 스코프 값 대신 동의 화면에 표시되는 짧은 이름. 최대 128자. |
| `description` | 문자열 \| null | 아니요 | 동의 화면에서 이름 아래에 표시되는 상세 설명. 최대 1024자. |
| `consent_text_i18n` | 객체 \| null | 아니요 | 언어 태그 → 동의 화면 텍스트, 예: `{"en": "Read your orders"}`. 최대 30개 언어, 각 텍스트 1–1024자, 전체 16 KiB. |
| `sensitivity` | 문자열 | 아니요 | `normal`(기본값) 또는 `sensitive`. |

`display_name`, `description`, `consent_text_i18n`은 `null`로 지울 수 있습니다. `sensitivity`는 지울 수 없습니다. `consent_text_i18n`은 전체가 대체됩니다. 빠뜨린 언어는 제거되므로, 유지하려는 모든 언어를 보내십시오.

### 동의 화면 텍스트

호스팅된 동의 화면은 요청된 각 스코프를 다음과 같이 표시합니다. 페이지 언어에 맞는 `consent_text_i18n` 항목(정확한 태그, 없으면 기본 하위 태그), 없으면 `display_name`, 그것도 없으면 스코프 `value`입니다. `description`은 상세 줄로 표시됩니다. 세 값 모두 일반 텍스트입니다. 제어 문자(줄바꿈과 탭 포함), 줄 및 단락 구분자, 양방향 삽입·재정의·격리 문자(U+202A–U+202E, U+2066–U+2069)는 `422`로 거부됩니다. 앞뒤 공백은 잘리며, 잘린 뒤 비어 있는 텍스트는 `null`로 저장됩니다. HTML은 해석되지 않으며, 동의 화면이 이스케이프합니다.

## 응답

`200 OK`

```json
{
  "id": "perm_01h455vb4pex5vsknk084sn02s",
  "api_id": "api_01h455vb4pex5vsknk084sn02q",
  "value": "read:orders",
  "display_name": "Read orders",
  "description": "See your past orders and their status",
  "consent_text_i18n": {
    "en": "Read your orders",
    "tr": "Siparişlerinizi okuyun"
  },
  "sensitivity": "normal"
}
```

## 오류

| HTTP | code | 언제 |
|---|---|---|
| 400 | `unknown_field` | 패치에 `api_id` 또는 알 수 없는 필드가 있습니다. |
| 404 | `not_found` | 이 환경에 그러한 권한이 없습니다. |
| 409 | `conflict` | 권한이 시스템 API에 속합니다. |
| 415 | `unsupported_media_type` | 콘텐츠 유형이 `application/merge-patch+json`이 아닙니다. |
| 422 | `validation_failed` | 패치가 비어 있거나, 값이 잘못되었거나 일반 텍스트가 아니거나, `sensitivity`가 `null`이거나, `value`가 다릅니다(`immutable`). |

## 예제

```bash
curl -X PATCH https://api.eu.keenauth.com/v1/permissions/perm_01h455vb4pex5vsknk084sn02s \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -d '{"description":"See your past orders and their status","consent_text_i18n":{"en":"Read your orders","tr":"Siparişlerinizi okuyun"}}'
```
