Access Control
사용자의 로그인 상태, 역할이나 권한, 또는 IP 주소를 기반으로 스키마에 대한 세밀한 액세스를 부여하여, 누가 어떤 데이터에 액세스할 수 있는지 관리합니다.

Click to watch tutorial video - 08:04
액세스 제어 목록을 정의하여 사용자의 API에 대한 세밀한 액세스를 관리합니다.
액세스 제어 목록
이 확장 기능을 사용하면 액세스 제어 목록을 생성하여, 다음 규칙을 통해 GraphQL 스키마의 다양한 요소(오퍼레이션, 필드, 디렉티브)에 누가 액세스할 수 있는지 관리할 수 있습니다.
- 액세스 비활성화
- 사용자가 로그인 중이거나 로그아웃 상태인 경우에만 액세스 허용
- 사용자가 특정 역할을 가진 경우에만 액세스 허용
- 사용자가 특정 권한을 가진 경우에만 액세스 허용
- 방문자가 허용된 IP에서 접속하는 경우에만 액세스 허용

오퍼레이션, 필드, 글로벌 필드, 디렉티브 중에서 어떤 스키마 요소에 액세스하기 위해 어떤 규칙을 충족해야 하는지 지정합니다.
GraphQL 쿼리를 실행할 때, 해당 쿼리에 액세스 제어 목록에서 선택된 스키마 요소가 포함되어 있으면 선택한 규칙이 평가됩니다.
어떤 규칙이라도 충족되지 않으면 해당 오퍼레이션, 필드 또는 디렉티브에 대한 액세스가 거부됩니다.
퍼블릭/프라이빗 스키마 모드
액세스 제어를 통해 필드 또는 디렉티브에 대한 액세스가 거부된 경우, API가 동작하는 방식은 두 가지가 있습니다.
퍼블릭 모드: 스키마의 필드가 공개되며, 권한이 충족되지 않을 경우 사용자는 권한이 거부된 이유에 대한 설명을 포함한 오류 메시지를 받습니다. 이 동작으로 스키마의 메타데이터는 항상 이용 가능한 상태가 됩니다.
프라이빗 모드: 스키마는 각 사용자에 맞게 커스터마이즈되어, 해당 사용자가 액세스할 수 있는 필드만 포함됩니다. 따라서 금지된 필드에 액세스하려고 하면 오류 메시지에 해당 필드가 존재하지 않는다고 표시됩니다. 이 동작으로 스키마의 메타데이터는 액세스할 수 있는 사용자에게만 공개됩니다.

예를 들어, 퍼블릭 모드 에서는 다음과 같은 응답이 반환될 수 있습니다.
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}반면, 프라이빗 모드 에서는 다음과 같은 응답이 반환될 수 있습니다.
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}