Access Control
Berikan akses granular ke skema (berdasarkan apakah pengguna sudah login, memiliki peran atau kemampuan tertentu, atau berdasarkan IP), untuk mengelola siapa yang dapat mengakses data apa.

Click to watch tutorial video - 08:04
Tentukan Daftar Kontrol Akses untuk mengelola akses granular ke API bagi pengguna Anda.
Daftar Kontrol Akses
Ekstensi ini memungkinkan kita membuat Daftar Kontrol Akses, untuk mengelola siapa yang dapat mengakses berbagai elemen (operasi, field, dan direktif) dari skema GraphQL, menggunakan aturan-aturan berikut:
- Nonaktifkan akses
- Berikan akses hanya jika pengguna sudah login atau belum login
- Berikan akses hanya jika pengguna memiliki peran tertentu
- Berikan akses hanya jika pengguna memiliki kemampuan tertentu
- Berikan akses hanya jika pengunjung berasal dari IP yang diizinkan

Kita menentukan aturan apa yang harus dipenuhi untuk mengakses elemen skema tertentu, dari antara operasi, field, field global, dan direktif.
Saat mengeksekusi sebuah GraphQL query, jika query tersebut mengandung salah satu elemen skema yang dipilih dalam Daftar Kontrol Akses, aturan-aturan yang dipilih akan dievaluasi.
Jika ada aturan yang tidak terpenuhi, akses ke operasi, field, atau direktif tersebut akan ditolak.
Mode Skema Publik/Privat
Ketika akses ke suatu field atau direktif ditolak melalui Kontrol Akses, ada 2 cara API dapat berperilaku:
Mode publik: Field-field dalam skema diekspos, dan ketika izin tidak terpenuhi, pengguna mendapatkan pesan kesalahan dengan deskripsi mengapa izin ditolak. Perilaku ini membuat metadata dari skema selalu tersedia.
Mode privat: Skema disesuaikan untuk setiap pengguna, hanya berisi field-field yang tersedia baginya, sehingga saat mencoba mengakses field yang dilarang, pesan kesalahan menyatakan bahwa field tersebut tidak ada. Perilaku ini hanya mengekspos metadata dari skema kepada pengguna yang dapat mengaksesnya.

Misalnya, dalam mode publik, kita mungkin mendapatkan respons ini:
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}Sementara dalam mode privat kita mungkin mendapatkan respons ini:
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}