Authentication Flow & Validasi

Sistem Haflah menggunakan mekanisme multi-authentication dengan pemisahan Controller namun menggunakan guard bawaan Laravel (web).

1. Alur Login Admin (Staff)

Staff (Superadmin, Admin, Operator, Walikelas) melakukan login melalui rute /admin/login.

  • Controller: App\Http\Controllers\Auth\AdminLoginController
  • Validasi Input:
    • username: Required, String
    • password: Required, String
  • Kondisi Login:
    • User harus berstatus aktif (is_active = true).
    • User harus memiliki relasi role di mana is_staff = true.
    • Jika username / password salah, mengembalikan pesan: "Username atau password salah."
  • Redirect: Jika berhasil login, diarahkan ke route('admin.dashboard'). Jika pengguna yang sudah login mengakses kembali halaman login, mereka akan otomatis diredirect sesuai hak aksesnya (Admin ke dashboard admin, Guest ke portal guest).

2. Alur Login Guest (Tamu)

Tamu undangan melakukan login melalui rute /login.

  • Controller: App\Http\Controllers\Auth\GuestLoginController
  • Validasi Input:
    • phone: Required, String, maksimal 20 karakter. Jika kosong, mengembalikan pesan: "Nomor telepon wajib diisi."
  • Normalisasi Nomor Telepon:
    • Karakter non-digit dihapus dari input.
    • Jika nomor diawali 8, otomatis diubah menjadi 08...
    • Jika nomor diawali 62, otomatis diubah menjadi 0...
  • Kondisi Login:
    • User harus berstatus aktif (is_active = true).
    • User harus memiliki role di mana is_staff = false (role guest).
    • Login hanya menggunakan nomor telepon tanpa password.
    • Jika tidak ditemukan, mengembalikan pesan: "Nomor telepon tidak terdaftar sebagai tamu undangan."
  • Redirect: Jika berhasil login, diarahkan ke route('portal.dashboard'). Jika sudah pernah login, redirect dilakukan secara otomatis.

3. Manajemen Session dan Middleware

  • Unauthenticated Middleware: Jika sesi pengguna habis (Session Expired) dan mereka mencoba mengakses halaman yang diproteksi, sistem akan otomatis melakukan redirect ke Halaman Utama / Home (/), diatur melalui bootstrap/app.php menggunakan metode redirectGuestsTo().
  • Middleware Khusus Akses:
    • admin: Memastikan pengguna yang login memiliki role staff (via AdminMiddleware).
    • superadmin: Membatasi akses eksklusif hanya untuk Superadmin (via SuperadminMiddleware).
    • hguest: Memastikan pengguna yang login adalah Tamu (via GuestMiddleware).
    • can: Digunakan bersama permission key (Dynamic RBAC) untuk mengecek hak akses fitur secara spesifik (contoh: can:event.view).