사용자 API
엔드포인트: /api/iam/users/
Alpacon 워크스페이스의 사용자 계정을 관리합니다. 사용자 ID 대신 pk=-를 사용하면 현재 인증된 사용자 자신을 참조합니다.
사용자 목록 조회
사용자 목록을 가져옵니다. 기본 정렬 순서는 슈퍼유저, 스태프, 활성 사용자 순이며 그 다음 사용자명 순입니다.
GET /api/iam/users/
쿼리 파라미터
| 파라미터 | 타입 | 설명 |
|---|---|---|
is_active | boolean | 활성 상태로 필터링 |
is_staff | boolean | 스태프 상태로 필터링 |
is_superuser | boolean | 슈퍼유저 상태로 필터링 |
is_ldap_user | boolean | LDAP 사용자 상태로 필터링 |
shell | string | 셸로 필터링 (정확히 일치) |
username | string | 사용자명으로 필터링 (정확히 일치) |
username__icontains | string | 사용자명으로 필터링 (대소문자 무시 부분 일치) |
added_at__gte | datetime | 해당 날짜 이후에 추가된 사용자 필터링 |
added_at__lte | datetime | 해당 날짜 이전에 추가된 사용자 필터링 |
added_at__gt | datetime | 해당 날짜 이후에 추가된 사용자 필터링 (미포함) |
added_at__lt | datetime | 해당 날짜 이전에 추가된 사용자 필터링 (미포함) |
exclude_group | UUID | 해당 그룹에 속한 사용자 제외 |
search | string | username, first_name, last_name, email, phone, tags, description, uid, added_at 필드에서 검색 |
ordering | string | 정렬 필드. 옵션: first_name, last_name, email, tags, uid, is_superuser, is_staff, is_active, date_joined, last_login, added_at, updated_at. 내림차순은 - 접두사 사용 |
page | integer | 페이지 번호 |
page_size | integer | 페이지당 결과 수 (기본값: 15, 최대: 100) |
응답
{
"count": 15,
"next": null,
"previous": null,
"results": [
{
"id": "a540bf0f-8b37-4f03-8546-dd71c6b03329",
"auth0_id": "auth0|64a1b2c3d4e5f6a7b8c9d0e1",
"username": "admin",
"first_name": "John",
"last_name": "Doe",
"email": "admin@example.com",
"phone": "+1-555-0100",
"tags": "infrastructure, lead",
"num_groups": 3,
"uid": 2000,
"is_active": true,
"is_staff": true,
"is_superuser": true,
"is_ldap_user": false,
"date_joined": "2023-01-15T10:00:00Z"
}
]
}
사용자 상세 조회
특정 사용자의 세부 정보를 조회합니다. pk=-를 사용하면 현재 인증된 사용자의 정보를 조회합니다.
GET /api/iam/users/{user_id}/
경로 파라미터
| 파라미터 | 타입 | 설명 |
|---|---|---|
user_id | UUID | 사용자 ID 또는 인증된 사용자를 나타내는 - |
응답
{
"id": "a540bf0f-8b37-4f03-8546-dd71c6b03329",
"auth0_id": "auth0|64a1b2c3d4e5f6a7b8c9d0e1",
"username": "admin",
"first_name": "John",
"last_name": "Doe",
"email": "admin@example.com",
"phone": "+1-555-0100",
"tags": "infrastructure, lead",
"num_groups": 3,
"uid": 2000,
"is_active": true,
"is_staff": true,
"is_superuser": true,
"is_ldap_user": false,
"date_joined": "2023-01-15T10:00:00Z",
"description": "System administrator",
"shell": "/bin/bash",
"home_directory": "/home/admin",
"last_login": "2024-01-20T09:15:00Z",
"last_login_ip": "203.0.113.45",
"added_at": "2023-01-15T10:00:00Z",
"updated_at": "2024-01-20T09:15:00Z",
"websh_total_lifetime": 86400,
"webftp_upload_bytes": 1048576,
"webftp_download_bytes": 5242880
}
사용자 생성
새 사용자 계정을 생성합니다. uid는 2000부터 자동으로 할당되며 home_directory는 /home/{username}으로 설정됩니다. password를 제공하지 않으면 자동으로 생성됩니다.
POST /api/iam/users/
요청 본문
{
"username": "jsmith",
"first_name": "Jane",
"last_name": "Smith",
"email": "jane.smith@example.com",
"phone": "+1-555-0200",
"tags": "developer",
"description": "Backend developer",
"shell": "/bin/bash"
}
요청 파라미터
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
username | string | Yes | 사용자명. ^[a-z][a-z0-9_-]*$ 패턴 필수 |
first_name | string | No | 이름 |
last_name | string | No | 성 |
email | string | No | 이메일 주소 |
phone | string | No | 전화번호 |
tags | string | No | 쉼표로 구분된 태그 |
description | string | No | 사용자 설명 |
shell | string | No | 로그인 셸 (기본값: /bin/bash) |
is_active | boolean | No | 활성 상태 (기본값: true) |
is_staff | boolean | No | 스태프 상태 (기본값: false) |
is_superuser | boolean | No | 슈퍼유저 상태 (기본값: false) |
is_ldap_user | boolean | No | LDAP 사용자 플래그 (기본값: false) |
응답
{
"id": "b651cf10-9c48-4a14-9657-ee82d7c14430",
"auth0_id": "",
"username": "jsmith",
"first_name": "Jane",
"last_name": "Smith",
"email": "jane.smith@example.com",
"phone": "+1-555-0200",
"tags": "developer",
"num_groups": 0,
"uid": 2001,
"is_active": true,
"is_staff": false,
"is_superuser": false,
"is_ldap_user": false,
"date_joined": "2024-01-20T10:00:00Z"
}
사용자 수정
사용자 계정 속성을 수정합니다. 스태프 사용자만 다른 사용자를 수정할 수 있습니다. username 필드는 수정 시 읽기 전용입니다.
PATCH /api/iam/users/{user_id}/
경로 파라미터
| 파라미터 | 타입 | 설명 |
|---|---|---|
user_id | UUID | 수정할 사용자의 ID |
요청 본문
{
"first_name": "Janet",
"email": "janet.smith@example.com",
"tags": "developer, senior",
"is_active": true,
"is_staff": true
}
요청 파라미터
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
first_name | string | No | 이름 |
last_name | string | No | 성 |
email | string | No | 이메일 주소 |
phone | string | No | 전화번호 |
tags | string | No | 쉼표로 구분된 태그 |
description | string | No | 사용자 설명 |
shell | string | No | 로그인 셸 |
is_active | boolean | No | 활성 상태 |
is_staff | boolean | No | 스태프 상태 |
password | string | No | 새 비밀번호 (쓰기 전용) |
응답
{
"id": "b651cf10-9c48-4a14-9657-ee82d7c14430",
"auth0_id": "",
"username": "jsmith",
"first_name": "Janet",
"last_name": "Smith",
"email": "janet.smith@example.com",
"phone": "+1-555-0200",
"tags": "developer, senior",
"num_groups": 1,
"uid": 2001,
"is_active": true,
"is_staff": true,
"is_superuser": false,
"is_ldap_user": false,
"date_joined": "2024-01-20T10:00:00Z"
}
사용자 삭제
사용자 계정을 삭제합니다. 마지막 슈퍼유저, 그룹의 마지막 소유자, 또는 결제 소유자인 경우 삭제할 수 없습니다. ?purge=true를 사용하면 사용자 레코드를 영구적으로 제거합니다.
DELETE /api/iam/users/{user_id}/
경로 파라미터
| 파라미터 | 타입 | 설명 |
|---|---|---|
user_id | UUID | 삭제할 사용자의 ID |
쿼리 파라미터
| 파라미터 | 타입 | 설명 |
|---|---|---|
purge | boolean | true로 설정하면 사용자 레코드를 영구적으로 제거 |
응답
204 No Content
사용자를 삭제하면 해당 계정과 모든 그룹 멤버십이 제거됩니다. 마지막 슈퍼유저, 그룹의 마지막 소유자, 또는 결제 소유자인 경우 작업이 실패합니다.
오류 코드
| 상태 | 오류 코드 | 설명 |
|---|---|---|
| 400 | INVALID_REQUEST | 잘못된 파라미터 |
| 401 | UNAUTHORIZED | 인증되지 않음 |
| 403 | FORBIDDEN | 권한 거부 |
| 404 | NOT_FOUND | 사용자를 찾을 수 없음 |