PHP LUMEN AUTHORIZATION

PHP LUMEN  AUTHORIZATION
Image result for php lumen
Hai, ditutorial hari ini akan saya jelaskan cara menerapkan authorization.
Pertama kita tambahkan terlebih dahulu column role pada table users denga membuat migrasi baru seperti berikut.
Kita membuat tipe data enum untuk role yag terdiri dari 3 data yaitu reader, editor, dan admin. Secara default column role yang sudah terdaftar di database menjadi role=reader.
Sekarang kita atur kebutuhan user role.
Admin
  • Bisa read all posts
  • Bisa read detail post
  • Bisa create post
  • Bisa update post
  • Bisa delete post
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)
Reader
  • 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 :
Buka file app/Providers/AuthServiceProvider.php, ubah code nya seperti dibawah ini.
Screenshot_34.png
Buka file app/Http/Controllers/PostsController.php, tambahkan Gate class dan ubah function index seperti berikut.
Screenshot_35.png
Sekarang coba login dengan user yang role = ‘reader’, kemudian akses endpoint http://localhost:8000/posts?page=1 maka respon nya seperti dibawah ini.
Screenshot_36
Sekarang coba login dengan user yang role = ‘admin’ atau ‘editor’, jika kita login menggunakan role ‘admin’, maka list post nya adalah semua posts.
Screenshot_37.png
Sedangkan jika kita login menggunakan role ‘editor’, maka respon nya hanyalah data post yang memiliki user_id seperti id user login.
Screenshot_38.png
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 :
Buka file app/Providers/AuthServiceProvider.php, modifikasi script menjadi seperti berikut.
Screenshot_39
Buka file app/Http/Controllers/PostsController.php, ubah function update menjadi seperti berikut.
Screenshot_40.png
Anda coba login dengan user yang role = ‘reader’, lakukan update data, maka respon nya seperti dibawah ini.
Screenshot_41.png
Jika anda login dengan user yang valid authorization nya, maka tampilanya seperti dibawah.
Screenshot_42.png
Endpoint Untuk Public User
Untuk public user atau role ‘reader’ bisa melakukan Read All dan Read Detail. Untuk mengakomodir kebutuhan ini kita akan membuat routes dan controller baru.
GET /public/posts -> endpoint untuk read all.
GET /public/posts/{id} -> endpoint untuk read detail.
Screenshot_44.png
Kemudian buat subfolder dari Controller bernama Publics, buat controller PostsController.
Screenshot_45.png
Buat function index pada PostsController.php
Screenshot_47.png
pada function index di atas kita memanggil logika policy baru untuk user ‘reader’. Kemudian kita tambahkan pada AuthServiceProvider.php script berikut.
Screenshot_48.png
Sekarang test di postman mengunakan user role ‘reader’ dan endpoint http://localhost:8000/public/posts maka response akan seperti berikut.
Screenshot_49.png
Selanjutnya terapkan pada method show detail post, buat function show pada App\Http\Controllers\Publics\PostsController.php.
Screenshot_50.png
Buat logika policy baru di AuthServiceProvider.php.
Screenshot_51.png
Kemudian test di postman untuk melihat detail data post berdasarkan id.
Screenshot_52.png
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
Screenshot_55
Setelah itu kita terapkan pada method store terlebih dahulu, tambahkan script berikut.
Screenshot_54.png
Selanjutnya kita test si postman dengan melakukan inputan data melalui body->form data.
Screenshot_53
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.
Screenshot_57.png
Selanjutnya kita modifikasi method show.
Screenshot_59
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.
Screenshot_60.png
Namun ketika kita login menggunakan user role ‘editor’, kita hanya bisa mengkases detail post dengan id berdasarkan user_id yang login, sebagai contoh kita mengakses detail post dengan id 19 tetap bisa karena user id tersebut adalah 3 atau sama dengan id user yang sedang login.
Screenshot_60.png
Namun ketika kita ingin mengakses detail post dengan id 9, respon akan ‘You are unauthorized’ karena id post 9 memiliki user_id = 1.
Screenshot_61.png
Untuk lebih memastikannya sekarang login kembali menggunakan role ‘admin’, maka data post dengan id 9 akan bisa di akses karena role ‘admin’ bisa mengkases seluruh data detail post.
Screenshot_62.png
Selanjutnya menerapkan pada method destroy, lakukan modifikasi pada method destroy seperti berikut.
Screenshot_65.png
Saat ini kita sedang login menggunakan user role ‘admin’, maka kita bisa menghapus data dengan id berapapun seperti berikut.
Screenshot_63.png
Namun ketika kita login menggunakan user role ‘editor’, kita hanya bisa menghapus data berdasarkan user_id yang sedang login.
Screenshot_64.png
Mengapa demikian ? karena post dengan id 16 memiliki user_id = 1, sedangkan user yang sedang login memiliki id = 3, maka dari itu kita coba untuk menghapus data post dengan id 18, dimana data post tersebut memiliki user_id = 3.
Screenshot_66
Sekian tutorial kali ini, selamat mencoba.

Comments

Popular posts from this blog

Microservice

Directive dan List Vue.js

Form dan Filtering Vue.js