Tech: Redirect Berdasarkan Role Selepas Log Masuk

Aku adaptasi artikel ini daripada artikel asal, Redirect after login or register in Laravel: Adding a custom method. Aku ada dua jenis pengguna:

  1. Pengguna berdaftar
  2. Admin sistem

Dan aku perlukan mereka ini dihantar kepada dua tempat berlainan selepas proses log masuk.

Pengguna URL
Pengguna Berdaftar /home
Admin Sistem /admin

Aku gunakan modul auth daripada Laravel, daripada LoginController ada satu variable yang menyatakan url yang diletakkan secara lalai untuk sebarang log masuk yang berjaya dibuat.

/**
 * Where to redirect users after login.
 *
 * @var string
 */
protected $redirectTo = '/home';

Kita boleh mengubah variable tersebut kepada function untuk memudahkan membuat if else. Kenapa tidak menggunakan ternary atau if else biasa sahaja seperti kod di bawah?

/**
 * Where to redirect users after login.
 *
 * @var string
 */
if(auth()->user()->is_admin) {
  protected $redirectTo = '/admin';
} else {
  protected $redirectTo = '/home';
}

// atau

protected $redirectTo = auth()->user()->is_admin ? '/admin' : '/home';

Untuk memudahkan proses membuat test script dan masih boleh digunakan jika sistem perlu menambah golongan ketiga, keempat mahu pun kelima kelak. Lebih future proof.

Maka daripada kod asal, aku tukarkan kepada kod ini;

/**
 * Where to redirect users after login.
 *
 * @return string
 */
public function redirectTo(): string
{
    if(auth()->user()->is_admin) {
        return '/admin';
    } else {
        return '/home';
    }
}

Dengan ini, apabila pengguna dapat membuat log masuk ke dalam sistem, sistem akan terus menyemak adakah pengguna ini seorang admin atau pengguna biasa, jika admin sistem akan membawanya kepada paparan admin. Jika tidak maka pengguna tersebut akan dibawa kepada paparan pengguna biasa.

Nota: Kaedah ini tidak akan menyelesaikan masalah jika pengguna biasa masuk ke paparan admin menggunakan kaedah menukar alamat laman web. Untuk menyelesaikan masalah ini sila gunakan middleware atau fungsi di dalam route untuk memastikan hanya admin yang boleh masuk ke paparan admin.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.