Autorisasi Menggunakan Policies di Lumen Micro Framework #10



Tutorial ini menggunakan project baru yang berbeda dengan sebelumnya serta study case yang berbeda juga untuk temen-temen yang ingin downlond projek ini silahkan klik link. Dari tutorial sebelum nya yaitu menggunakan autentikasi pada login dan register sekarang kita akan menggunakan autorisasi.

Untuk tutorial ini kita mempunyai beberapa tahap penting yang haru temen-temen ikuti dengan teliti, berikut point nya :

  • Menambahkan Column Role Pada Table users
  • Membuat Logika Policy Pada Read All Post
  • Membuat Logika Policy Pada Update Post 


Menambahkan Column Role Pada Table users

Jika sebelumnya belum membuat table users, sekarang kita harus membuat dulu table add role to users.
Untuk menambahkan column role pada table users, mari kita ikuti langkah-langkah berikut ini:

1. Membuat database migration dengan menjalankan command dibawah ini pada terminal:
php artisan make:migration add_role_to_users_table --table=users

2. Buka file database/migrations/..._add_role_to_users_table.php, dan ubah menjadi seperti dibawah ini

3. Jalankan command dibawah ini pada terminal:
php artisan migrate

4. Secara default column role yang sudah terdaftar di database menjadi role=viewer, karena setting default pada role yaitu viewer.

5. Kita akan memerlukan 3 users dengan role yang berbeda, silahkan buat/register user dengan beberapa role yang sudah ditentukan:
- administrator
- creator
- viewer


Kebutuhan User Role

Setiap role dari user, memiliki kemampuan yang berbeda-beda, yakni:

1. Administrator

- Bisa read all posts
- Bisa read detail post
- Bisa create posts
- Bisa update post
- Bisa delete post

2. C
reator

- Bisa read all posts (yang dibuat oleh user yang lagi login)
- Bisa read detail post (yang dibuat oleh user yang lagi login)
- Bisa create posts
- Bisa update post (yang dibuat oleh user yang lagi login)
- Bisa delete post (yang dibuat oleh user yang lagi login)

3. V
iewer

- Bisa read all posts
- Bisa read detail post
- Bisa memberikan comment pada post tertentu


Membuat Logika Policy Pada Read All Post

Logika police ini berguna untuk menentukan role apa bisa mengakses data apa. Untuk implementasi kebutuhan user role diatas, kita akan menggunakan fitur policies dari Lumen.

Untuk membuat logika policy pada read all, mari ikuti langkah-langkah dibawah ini:

1. Buka file app/Providers/AuthServiceProvider.php, masukkan script seperti dibawah ini. Lihat line 34 - 44.
.

2. Buka file app/Http/Controllers/PostsController.php, tambahkan Gate class dan ubah function index. Lihat line 8 dan line 19 - 37.

3. 
Sebelumnya setelah kita membuat user dengan beberapa role yang berbeda, sekarang kita  akan mencoba login dengan user role = ‘viewer’, maka respon yang didapat untuk read all page 1 seperti dibawah ini (false/error). 


4. Jika kita login dengan user yang memiliki role creator atau administrator, bila kita menggunaka user = ‘administrator’, maka list post nya adalah semua posts. Disini saya menggunakan user = 'creator' dengan bearer login creator atau autorisasi yang valid maka tampilanya seperti dibawah ini.





Membuat Logika Policy Pada Update Post

User yang bisa melakukan update adalah ‘creator’ dan ‘admin’. Untuk ‘creator’ hanya bisa meng-update post yang dia create, untuk ‘administrator’ bisa meng-update semua post. Untuk membuat logika policy pada create, mari ikuti langkah-langkah dibawah ini:

1. Buka file app/Providers/AuthServiceProvider.php, masukkan script dibawah ini pada block function boot


2. Buka file app/Http/Controllers/PostsController.php lalu update script  pada function update, Lihat line 10 - 19 itu adalah script autorisasi untuk function update.

3. Sekarang kita coba menggunakan user = ‘administrator’ serta autorisasi yang valid, maka trespon seperti dibawah ini.




Endpoint Untuk Public User

Untuk public user yang bisa melakukan Read All dan Read Detail. Untuk mengakomodir kebutuhan ini saya hanya membuat routes nya dulu 

GET /public/posts 
Function: index

GET /public/post/{postID} 
Function: show


Tantangan
Untuk menambah keahlian kita, mari kita ikuti tantangan dibawah ini:

1. Implementasi kebutuhan admin dan editor untuk create post
2. Implementasi kebutuhan admin dan editor untuk read detail post
3. Implementasi kebutuhan admin dan editor untuk delete post
4. Implementasi endpoint untuk public user

0 komentar:

Posting Komentar