Accesses API
Accesses API는 리소스에 대한 세분화된 접근 제어(Fine-Grained Authorization)를 관리합니다. 관계 기반 접근 제어(ReBAC) 모델을 사용하여 사용자/그룹과 리소스 간의 권한 관계를 정의합니다.
핵심 개념
D.Hub의 접근 제어는 세 가지 요소로 구성됩니다:
| 요소 | 형식 | 설명 | 예시 |
|---|---|---|---|
| User | {type}:{id} 또는 {type}:{id}#member | 권한의 주체 | user:alice, group:data-team#member |
| Relation | string | 권한 관계 | owner, editor, viewer |
| Object | {type}:{id} | 권한 대상 리소스 | dataset:sales-2024, pipeline:etl-daily |
관계 유형
- owner: 리소스 소유자. 모든 권한을 포함합니다.
- editor: 리소스 수정 권한. 읽기 권한을 포함합니다.
- viewer: 리소스 읽기 전용 권한.
엔드포인트
| Method | Path | Description |
|---|---|---|
| GET | /accesses/ | 접근 권한 조회 |
| POST | /accesses/ | 접근 권한 추가 |
| DELETE | /accesses/ | 접근 권한 제거 |
GET /accesses/
특정 조건에 맞는 접근 권한 관계를 조회합니다. Query parameter로 필터 조건을 전달합니다.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
user | string | No | 사용자 필터 (예: user:alice) |
relation | string | No | 관계 필터 (예: editor) |
object | string | No | 대상 리소스 필터 (예: dataset:sales-2024) |
노트
최소 하나의 필터를 지정해야 합니다. 모든 필터를 비워두면 결과가 반환되지 않습니다.
Response
200 OK
[
{
"user": "user:alice",
"relation": "owner",
"object": "dataset:sales-2024"
},
{
"user": "group:data-team#member",
"relation": "editor",
"object": "dataset:sales-2024"
}
]
POST /accesses/
하나 이상의 접근 권한 관계를 추가합니다. 권한 엔진과 그래프 저장소에 동시에 반영됩니다.
Request Body
[
{
"user": "user:alice",
"relation": "owner",
"object": "dataset:sales-2024"
},
{
"user": "group:data-team#member",
"relation": "editor",
"object": "pipeline:etl-daily"
}
]
| Field | Type | Required | Description |
|---|---|---|---|
user | string | Yes | 권한 주체 ({type}:{id} 형식) |
relation | string | Yes | 관계 유형 (owner, editor, viewer) |
object | string | Yes | 대상 리소스 ({type}:{id} 형식) |
Response
200 OK
{
"message": "Relation created successfully"
}
DELETE /accesses/
접근 권한 관계를 제거합니다. 조건에 매칭되는 모든 관계가 권한 엔진과 그래프 저장소에서 삭제됩니다.
Request Body
{
"user": "user:alice",
"relation": "editor",
"object": "dataset:sales-2024"
}
Response
200 OK
{
"message": "Relation deleted successfully"
}
사용 예시
# 특정 리소스의 모든 접근 권한 조회
curl "https://api.dhub.io/api/v1/accesses/?object=dataset:sales-2024" \
-H "Authorization: Bearer <access_token>"
# 사용자에게 권한 부여
curl -X POST https://api.dhub.io/api/v1/accesses/ \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '[
{
"user": "user:bob",
"relation": "viewer",
"object": "dataset:sales-2024"
}
]'
# 권한 제거
curl -X DELETE https://api.dhub.io/api/v1/accesses/ \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{
"user": "user:bob",
"relation": "viewer",
"object": "dataset:sales-2024"
}'
그룹 권한
그룹 단위로 권한을 부여하려면 user 필드에 group:{group_name}#member 형식을 사용합니다. 해당 그룹의 모든 멤버에게 권한이 적용됩니다.