Permissions API untuk Web

Jika Anda pernah menggunakan Geolocation API sebelumnya, kemungkinan Anda ingin memeriksa apakah Anda memiliki izin untuk Geolokasi tanpa menyebabkan dialog. Ini sangat tidak mungkin. Anda harus meminta posisi saat ini dan ini akan menunjukkan status izin atau menyebabkan permintaan ditampilkan kepada pengguna.

Tidak semua API berfungsi seperti ini. Notifications API memiliki cara sendiri untuk mengizinkan Anda untuk memeriksa status izin akses saat ini melalui Notification.permission.

Seiring berkembangnya platform web dengan API, perlu ada satu cara standar untuk pengembang untuk memeriksa status izin daripada harus mengingat cara kerja setiap API. Permission API, yang tersedia di Chrome versi 43, adalah dimaksudkan sebagai satu-satunya cara standar untuk memeriksa status izin API.

permissions.query()

Periksa status izin menggunakan metode permissions.query(). Hal ini akan menampilkan status "diberikan" (Anda memiliki izin), ditolak (Anda diblokir dari mengakses API) atau prompt (kebutuhan pengguna yang berbeda). Contoh:

// Check for Geolocation API permissions
navigator.permissions.query({name:'geolocation'})
    .then(function(permissionStatus) {
    console.log('geolocation permission state is ', permissionStatus.state);

    permissionStatus.onchange = function() {
        console.log('geolocation permission state has changed to ', this.state);
    };
    });

Metode kueri mengambil PermissionDescriptor tempat Anda menentukan nama izin. Responsnya adalah Promise menyelesaikan masalah menjadi PermissionStatus . Dari objek ini, Anda dapat memeriksa status dengan permissionStatus.state untuk 'granted', 'denied' atau 'prompt'. Anda juga bisa menerapkan peristiwa untuk permissionStatus.onchange dan menangani perubahan izin status.

PermissionDescriptors yang Didukung

Di contoh di atas, kami menyoroti cara mengkueri status izin akses untuk geolokasi dengan deskripsi izin berikut: {name:'geolocation'}.

Deskriptor izin Notifikasi serupa karena hanya memerlukan sebuah atribut nama: {name:'notifications'}.

Push dan midi masing-masing memiliki yang spesifik untuk API tersebut.

Untuk izin push, Anda dapat menyediakan parameter userVisibleOnly. Ini menunjukkan apakah Anda ingin menampilkan notifikasi untuk setiap pesan push atau dapat mengirim notifikasi push senyap (Untuk saat ini hanya Chrome mendukung pesan push dengan notifikasi). Anda akan menggunakannya seperti berikut:

navigator.permissions.query({name:'push', userVisibleOnly:true})

Midi mengizinkan parameter sysex. Hal ini menunjukkan apakah Anda perlu dan/atau menerima pesan eksklusif sistem. Untuk midi, kodenya adalah:

navigator.permissions.query({name:'midi', sysex:true})

Meminta Izin

Permintaan izin dari pengguna bergantung pada API tertentu. Misalnya, geolokasi akan menampilkan dialog izin saat Anda memanggil getCurrentPosition().

navigator.geolocation.getCurrentPosition(function(position) {
    console.log('Geolocation permissions granted');
    console.log('Latitude:' + position.coords.latitude);
    console.log('Longitude:' + position.coords.longitude);
});

Sedangkan notifikasi akan meminta izin pengguna saat Anda memanggil requestPermission().

Notification.requestPermission(function(result) {
    if (result === 'denied') {
    console.log('Permission wasn\'t granted. Allow a retry.');
    return;
    } else if (result === 'default') {
    console.log('The permission request was dismissed.');
    return;
    }
    console.log('Permission was granted for notifications');
});

Intinya adalah bahwa Permission API memungkinkan cara yang konsisten untuk memantau status izin sekaligus dapat mendukung berbagai API yang saat ini aktif web.

Keuntungan terbesarnya adalah Anda dapat membangun pengalaman yang lebih baik untuk pengguna Anda, hanya memberi tahu pengguna ketika jelas mengapa Anda membutuhkan hak istimewa dan memanfaatkan sepenuhnya API ini ketika Anda tahu bahwa Anda telah diberi izin.

Anda dapat menemukan kumpulan contoh lengkap di sini.

Dukungan Browser

Chrome adalah browser pertama yang menerapkan hal ini, Mozilla berencana merilisnya ini, dan Microsoft telah menunjukkan minat terhadap API.

Masalah Umum

  • Geolokasi tidak akan menampilkan kembali dialog jika pengguna menutup izin permintaan. Namun, status izin tetap 'prompt'. [bugs.chromium.org]