# Dokumentasi Sistem Autentikasi Multi-Role SIKAD (CodeIgniter 4)

Dokumen ini menjelaskan alur kerja, daftar file yang telah dibuat, dan pemetaan role pada sistem login multi-role SIKAD. Sangat berguna sebagai referensi pengembangan ke depan.

---

## 1. Alur Kerja Sistem Login (Flow)

1. **User Membuka Aplikasi:** User mengakses root `http://localhost:8080/` (Otomatis di-redirect ke `/login` jika belum login).
2. **Form Login (View):** Ditangani oleh `AuthController::login()` yang memanggil file view `login.php`.
3. **Submit Data:** User memasukkan *username* dan *password*, form dikirim via `POST` ke `AuthController::attemptLogin()`.
4. **Validasi (Controller & Model):** 
   - Controller memanggil `UserModel` untuk mencari *username* di database.
   - Jika ada, mengecek kecocokan *password* menggunakan fungsi `password_verify()`.
   - Jika cocok, sistem mendaftarkan data user (termasuk Role-nya) ke dalam **Session**.
5. **Pengecekan Keamanan (Filter):** 
   - Controller me-redirect user ke rute masing-masing (contoh: `/admin`).
   - Sebelum sampai ke Controller Admin, CodeIgniter akan memanggil **AuthFilter**.
   - Filter memastikan user sudah login dan mengecek apakah *Role* di Session **cocok** dengan *Role* yang diizinkan di `Routes.php`.
   - Jika lolos, barulah halaman dashboard (seperti `/admin/home`) ditampilkan. Jika gagal, ditendang kembali ke `/login`.
   - Jika user mencoba mengakses rute root (seperti `/admin`), maka akan di-redirect ke dashboard spesifiknya (seperti `/admin/home`).

---

## 2. Struktur Database

Sistem ini menggunakan tabel `users`.
- **Lokasi File Migration:** `app/Database/Migrations/2026-07-13-041451_Users.php`
- **Lokasi File Seeder (Data Dummy):** `app/Database/Seeds/UserSeeder.php`

**Kolom Tabel `users`:**
- `id` (INT, Primary Key, Auto Increment)
- `nama` (VARCHAR 150)
- `username` (VARCHAR 100, Unique)
- `email` (VARCHAR 150, Unique)
- `password_hash` (VARCHAR 255)
- `hints` (VARCHAR 255)
- `role` (ENUM: Admin, TU, Dosen, Mahasiswa, Keuangan, Administrasi Keuangan, Administrator PMB, Administrator Prodi, Dosen Belum-NIDN, Pimpinan)
- `status` (ENUM: active, inactive)
- `created_at` & `updated_at` (Datetime)

---

## 3. Daftar Role, Route, dan File Dashboard

Sistem memiliki 10 Role. Setiap Role memiliki "kamar" (Grup Route), Controller, dan Halamannya (View) sendiri-sendiri agar rapi dan tidak bercampur.

| Role (Database) | URL Akses | Controller (app/Controllers/) | File View (app/Views/) |
| :--- | :--- | :--- | :--- |
| **Admin** | `/admin/home` | `AdminController.php` | `admin/dashboard.php` |
| **Mahasiswa** | `/mahasiswa/home` | `MahasiswaController.php` | `mahasiswa/dashboard.php` |
| **TU** | `/tu/home` | `TuController.php` | `tu/dashboard.php` |
| **Dosen** | `/dosen/home` | `DosenController.php` | `dosen/dashboard.php` |
| **Keuangan** | `/keuangan/home` | `KeuanganController.php` | `keuangan/dashboard.php` |
| **Administrasi Keuangan** | `/administrasi-keuangan/home` | `AdminKeuanganController.php` | `admin_keuangan/dashboard.php` |
| **Administrator PMB** | `/admin-pmb/home` | `AdminPmbController.php` | `admin_pmb/dashboard.php` |
| **Administrator Prodi** | `/admin-prodi/home` | `AdminProdiController.php` | `admin_prodi/dashboard.php` |
| **Dosen Belum-NIDN** | `/dosen-non-nidn/home` | `DosenNonNidnController.php` | `dosen_non_nidn/dashboard.php` |
| **Pimpinan** | `/pimpinan/home` | `PimpinanController.php` | `pimpinan/dashboard.php` |

---

## 4. Peta Lokasi File Inti (Core Files)

Jika Anda ingin memodifikasi atau memperbaiki *core system* dari autentikasi ini, perhatikan 6 file utama berikut:

### A. Konfigurasi
1. **`.env`** *(Root Folder)*
   - Berisi pengaturan koneksi ke Database `sikad` dan seting baseURL aplikasi.
   - Variabel `CI_ENVIRONMENT` diset ke `production` untuk menyembunyikan Debug Toolbar dan pesan Error dari Publik (Security).
2. **`app/Config/Routes.php`**
   - Tempat semua URL didaftarkan. Anda bisa melihat logika "penguncian" *(group filter)* untuk semua halaman di sini.
3. **`app/Config/Filters.php`**
   - Tempat kita mendaftarkan Filter milik kita dengan nama alias/panggilan `'auth'`.

### B. MVC & Middleware
4. **Model:** `app/Models/UserModel.php`
   - Penghubung ke tabel `users`.
5. **Controller:** `app/Controllers/Auth.php`
   - Otak dari proses Login dan Logout. Logika *switch-case* pembagian peran berada di fungsi pembantu `redirectByRole()` di file ini.
6. **Middleware (Filter):** `app/Filters/AuthFilter.php`
   - Satpam penjaga pintu. Mengecek apakah orang yang mengakses suatu halaman sesuai rolenya atau tidak.

### C. Tampilan (View UI) & CSS Architecture
7. **Halaman Login:** `app/Views/auth/login.php`
   - Tampilan antarmuka saat user memasukkan password (menggunakan *Split-Screen Design*). File CSS (*style.css*) di-inline menggunakan `file_get_contents()` di sini demi menyembunyikan struktur direktori dari publik.
8. **Template Dasar Dashboard:** `app/Views/layouts/main.php`
   - Kerangka desain UI (Header & Sidebar). Memiliki logika Javascript (Vanilla JS) untuk menu Profil Dropdown di Header dan Accordion (Menu Dropdown/Bersarang) pada Sidebar. Juga meng-inline CSS secara langsung untuk keamanan.
9. **File Komponen Sidebar Dinamis:** `app/Views/layouts/sidebars/`
   - Folder berisi belasan file *Partial View* (`admin.php`, `mahasiswa.php`, dll) bersarang. Berfungsi membedakan menu untuk setiap Role.
10. **CSS Terpusat:** `public/assets/css/style.css`
    - "Gerbang utama" untuk seluruh styling aplikasi. Berisi variabel warna dan layout modern. Style sidebar tersembunyi/dropdown (`.has-submenu`, `.submenu`) ditulis di sini.

---
*Dokumentasi ini di-generate otomatis untuk mempermudah pengembangan SIKAD.*
