Kartika

PHP Lumen Authorization

Tutorial ini melanjutkan project dari tutorial sebelum nya dengan nama ‘PHP Lumen Authentication’. Pada tutorial ini kita akan menambahkan fungsi autentikasi. Tujuan praktek ini adalah untuk:

1. Mampu implementasi otorisasi menggunakan Lumen

2. Mampu membuat fungsi pengecekan otorisasi

3. Memahami logika untuk otorisasi

Prasyarat

Harus menyelesaikan dulu modul dengan judul ‘PHP Lumen Authentication’.

 

Menambahkan Column Role Pada Table 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=reader

5. Kita akan memerlukan 3 users dengan role yang berbeda, silahkan bikin user dengan role:  

    -  Admin

    -  Editor

    -  Reader



   6. Dan selesai

 

 Kebutuhan User Role

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

 

1.  Admin

    - Bisa read all posts

    - Bisa read detail post

    - Bisa create posts

    - Bisa update post

    - Bisa delete post

 

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 post

   - Bisa memberikan comment pada post tertentu

 

4. dan selesai

 

 

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, codenya seperti dibawah ini.

 

 

 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.

 

6. Dan selesai

 

 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.


 2. Buka file app/Http/Controllers/PostsController.php


 3. Anda coba login dengan user yang role = ‘user’, maka respon nya seperti dibawah ini.


4. Kalau anda login dengan user yang valid authorization nya, maka tampilanya seperti dibawah ini.


5. Selesai

Membuat Logika Policy Pada Create, Read detail dan Delete Post

User yang bisa melakukannya adalah ‘editor’ dan ‘admin’. Dan keduanya bisa melakukan di semua data post. Untuk membuat logika policy pada create, mari ikuti langkah-langkah dibawah ini:

 

Buka file app/Providers/AuthServiceProvider.php, codenya seperti dibawah ini.

 

 

 

Buka file app/Http/Controllers/PostsController.php, tambahkan di function create, show dan destroy



 

 Coba anda login dengan user yang valid authorization nya yaitu 'admin' atau 'editor', maka tampilanya seperti dibawah ini.

 

kita coba Create maka hasilnya seperti berikut

 

 

 

kita coba Read Detail

 

 kita coba Delete

 

 

 

 

Coba login dengan user yang role = ‘reader’, dan test di setiap function yang sudah di buat.

 

maka respon nya seperti dibawah ini.

 

coba Create

 

 

kemudian Read Detail

 

 

 lalu Delete

 

 

 

 

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.

 

Pertama buat dulu routes nya di Routes/web.php

 

 

 Buat file controller baru  dengan nama app/Http/Controllers/PublicController/PostsController.php

kemudian tambahkan code dibawah ini

 

 Buka file app/Models/Post.php, tambahkan code dibawah ini sebelum penutup Class:



Buka file app/Models/User.php, tambahkan code dibawah ini sebelum penutup Class:

 

 

 Buka url ​http://localhost:8000/public/2post​ di postman:

 

selesai




Komentar