Halo sobat Newbie, pada kesempatan kali ini kita akan membahas PHP Lumen Authorization. Tutorial ini melanjutkan tutorial sebelumnya yaitu PHP Lumen Authentication Tentu dalam menerapkan authorization ini kita gunakan, project lumen sebelumnya yang telah terdapat tabel users yang nanti akan kita buat authorizationnya.
Pertama Kita Menambahkan Column "Role" Pada Table users.
Untuk menambahkan column role pada table users, mari kita ikuti langkah-langkah berikut ini:
Membuat database migration dengan menjalankan command dibawah ini pada terminal
php artisan make:migration add_role_to_users_table --table=usersApabila berhasil maka akan tampil seperti ini
Buka file database/migrations/..._add_role_to_users_table.php, dan ubah menjadi seperti dibawah ini
Jalankan command dibawah ini pada terminal
php artisan migrate
Secara default column role yang sudah terdaftar di database menjadi role=reader.
Kita akan memerlukan 3 users dengan role yang berbeda, silahkan bikin user dengan role:
1. admin
2. editor
3. reader
Kita harus menambahkan syntax field role pada app/Http/Controllers/AuthController.php terlebih dahulu. Lihat line 37
Maka hasilnya akan seperti di bawah ini
Lihat id 13, role pada database menjadi editor (tidak default)
Kebutuhan User Role
Setiap role dari user, memiliki kemampuan yang berbeda-beda, yakni:
1. Admin
- Bisa read all posts
- Bisa read detail posts
- Bisa create posts
- Bisa update posts
- Bisa delete posts
2. Editor
- 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. Reader
- Bisa read all posts
- Bisa read detail posts
- Bisa memberikan comment pada post tertentu
Membuat Logika Policy Pada Read All Post
Logika policy 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, codenya seperti dibawah ini. Lihat line 33-35
2. Buka file app/Http/Controllers/PostsController.php, tambahkan Gate class dan ubah function index
3. Anda coba login dengan user yang role = ‘user’, maka respon nya seperti dibawah ini.
4. Anda coba login dengan user yang role = ‘admin’ atau ‘editor’, maka respon nya seperti dibawah ini
5. Kalau login pakai ‘admin’, maka list post nya adalah semua posts, kalau login pakai ‘editor’ pakai list post nya hanya post yang user_id = user logged in id.
Membuat Logika Policy Pada Update Post
User yang bisa melakukan update adalah ‘editor’ dan ‘admin’. Untuk ‘editor’ hanya bisa meng-update post yang dia create, untuk ‘admin’ bisa meng-update semua post. Untuk membuat logika policy pada create, mari ikuti langkah-langkah dibawah ini:
1. Buka file app/Providers/AuthServiceProvider.php, codenya seperti dibawah ini. Lihat line 43 - 51
2. Buka file app/Http/Controllers/PostsController.php, ubah function update. Lihat line 140 - 158
3. Anda coba login dengan user yang role = ‘reader’, maka respon nya seperti dibawah ini.
4. Kalau anda login dengan user yang valid authorization nya, maka tampilanya seperti dibawah ini
Endpoint Untuk Public User
Untuk public user bisa melakukan Read All dan Read Detail. Untuk mengakomodir kebutuhan ini kita akan membuat routes dan controller baru.
GET/public/posts
File Controller: app/Http/Controllers/Public/PostsController.php
Function: index
GET/public/post/{postID}
File Controller: app/Http/Controllers/Public/PostsController.php
Function: Show
Kemudian buat subfolder dari Controller bernama Publics, buat controller PostsController
Buat function index pada PostsController.php
pada function index di atas kita memanggil logika policy baru untuk user ‘reader’. Kemudian kita tambahkan pada AuthServiceProvider.php script berikut.
Sekarang test di postman mengunakan user role ‘reader’ dan endpoint http://localhost:8000/public/post maka response akan seperti berikut.
Selanjutnya terapkan pada method show detail post, buat function show pada App\Http\Controllers\Publics\PostController.php
Buat logika policy baru di AuthServiceProvider.php
Kemudian test di postman untuk melihat detail data post berdasarkan id
Untuk user dengan role ‘reader’ hanya bisa mengakses read all data post, dan detail post melalui endpoint /public/posts dan /public/posts/{id}. Selanjutnya kita akan menerapkan function store, show, delete pada user ‘admin’ dan ‘editor’
Membuat Logika Policy Pada Show, Save, dan Delete Post Dengan Role ‘Admin’ & ‘Editor’
Pertama kita buat terlebih dahulu logika policy pada folder app\Providers\AuthServiceProviders.php
Setelah itu kita terapkan pada method store terlebih dahulu, tambahkan script berikut.
Selanjutnya kita test si postman dengan melakukan inputan data melalui body->form data
Mengapa responnya seperti itu ? karena kita melakukan input data post menggunakan user role ‘reader’, sekarang kita coba login menggunakan user role ‘admin’, maka respon akan seperti dibawah ini.
Selanjutnya kita modifikasi method show
Test endpoint untuk mengakses detail data post menggunakan postman, saat ini kita sedang login menggunakan user role ‘admin’, maka kita bisa mengkases detail post dengan id berapapun
Selanjutnya menerapkan pada method destroy, lakukan modifikasi pada method destroy seperti berikut
Saat ini kita sedang login menggunakan user role ‘admin’, maka kita bisa menghapus data dengan id berapapun seperti berikut.
Namun ketika kita login menggunakan user role ‘editor’, kita hanya bisa menghapus data berdasarkan user_id yang sedang login.
Sekian tutorial kali ini, selamat mencoba.
0 Komentar