# Task Breakdown: 01 - Auth & Middleware

**Referensi Dokumen:** FR-01, NFR-02 (Keamanan)
**Tujuan:** Mengimplementasikan fitur autentikasi kustom berbasis *session* beserta pembatasan akses (*RoleMiddleware*) untuk keempat panel (`super_admin`, `operator`, `teacher`, `student`).

## 1. Controller & Logic
- [ ] Buat `AuthController` (bukan menggunakan package Breeze/Fortify).
- [ ] Buat method `login(LoginRequest $request)`:
  - Gunakan `Auth::attempt()`.
  - Cek `is_active` dari entitas `USERS`. Jika akun dinonaktifkan, kembalikan dengan pesan error (*"Akun tidak aktif"*).
  - Arahkan fungsi redirect dinamis pasca-login berdasarkan peran (*role*) yang terdeteksi:
    - `super_admin` / `operator` -> `/admin/dashboard` (atau `/operator/dashboard`).
    - `teacher` -> `/teacher/dashboard`.
    - `student` -> `/student/dashboard`.
- [ ] Buat method `logout()`: `Auth::logout()` lalu panggil `$request->session()->invalidate()` dan ubah token CSRF.

## 2. Middleware
- [ ] Buat `RoleMiddleware` (`php artisan make:middleware RoleMiddleware`).
  - Harus mampu menerima argumen lebih dari satu (*comma-separated*, misal `role:super_admin,operator`).
  - Evaluasi hak akses dari `auth()->user()->role`.
  - Kembalikan ke halaman `403 Forbidden` atau `abort(403)` jika mencoba mengakses area terlarang.

## 3. Form Requests
- [ ] Buat `LoginRequest`:
  - Validasi keberadaan array asosiatif: `email` (wajib, format email) dan `password` (wajib).

## 4. Acceptance Criteria
- [ ] User valid bisa login dan di-redirect ke panel sesuai rolenya.
- [ ] User non-aktif (`is_active = false`) gagal login dengan deskripsi tertulis jelas.
- [ ] Percobaan *Cross-Panel-Access* (Misal Student buka URL `/teacher/..`) mendapatkan halaman respons 403.
- [ ] Proses *logout* berhasil memutuskan session.
