Access Control
Cấp quyền truy cập chi tiết vào schema (dựa trên việc người dùng đã đăng nhập, có vai trò hoặc quyền hạn nào đó, hoặc theo IP), để quản lý ai có thể truy cập dữ liệu nào.

Click to watch tutorial video - 08:04
Xác định các Danh sách Kiểm soát Truy cập để quản lý quyền truy cập chi tiết vào API cho người dùng của bạn.
Danh sách Kiểm soát Truy cập
Tiện ích này cho phép chúng ta tạo các Danh sách Kiểm soát Truy cập, để quản lý ai có thể truy cập các phần tử khác nhau (thao tác, trường và chỉ thị) trong schema GraphQL, sử dụng các quy tắc sau:
- Vô hiệu hóa quyền truy cập
- Chỉ cấp quyền truy cập nếu người dùng đã đăng nhập hoặc chưa đăng nhập
- Chỉ cấp quyền truy cập nếu người dùng có một số vai trò nhất định
- Chỉ cấp quyền truy cập nếu người dùng có một số quyền hạn nhất định
- Chỉ cấp quyền truy cập nếu khách truy cập đến từ một địa chỉ IP được phép

Chúng ta chỉ định những quy tắc nào phải được thỏa mãn để truy cập vào các phần tử schema nào, trong số các thao tác, trường, trường toàn cục và chỉ thị.
Khi thực thi một GraphQL query, nếu nó chứa bất kỳ phần tử schema nào được chọn trong Danh sách Kiểm soát Truy cập, các quy tắc đã chọn sẽ được đánh giá.
Nếu bất kỳ quy tắc nào không được thỏa mãn, quyền truy cập vào thao tác, trường hoặc chỉ thị đó sẽ bị từ chối.
Chế độ Schema Công khai/Riêng tư
Khi quyền truy cập vào một trường hoặc chỉ thị bị từ chối thông qua Kiểm soát Truy cập, API có 2 cách hoạt động:
Chế độ công khai: Các trường trong schema được hiển thị, và khi quyền không được thỏa mãn, người dùng nhận được thông báo lỗi mô tả lý do tại sao quyền bị từ chối. Hành vi này làm cho metadata từ schema luôn khả dụng.
Chế độ riêng tư: Schema được tùy chỉnh cho từng người dùng, chỉ chứa các trường mà người dùng đó có thể truy cập, do đó khi cố gắng truy cập một trường bị cấm, thông báo lỗi cho biết rằng trường đó không tồn tại. Hành vi này chỉ hiển thị metadata từ schema cho những người dùng có quyền truy cập.

Ví dụ, trong chế độ công khai, chúng ta có thể nhận được phản hồi này:
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}Trong khi ở chế độ riêng tư chúng ta có thể nhận được phản hồi này:
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}