# Autentikasi & otorisasi

## Web (admin / site)

- **Ion Auth** (`application/third_party/ion_auth`), di-autoload (`application/config/autoload.php`).
- Login form: `Site::login` + `Site::login_auth` memanggil `$this->ion_auth->login()`.
- Pembatasan halaman: `MY_Controller` membaca `page_auth` dari config modul (`ci_bootstrap.php`) dan `ion_auth->in_group()`.

### CI4 (rencana)

- Opsi: **CodeIgniter Shield**, **Myth\Auth**, atau port minimal Ion Auth (berat).
- Admin layout saat ini **belum** memakai filter login — sengaja untuk foundation UI.

## API mobile (`Json.php` / CI4 `MobileJsonService`)

- **Login:** `username` + `password` → hash **MD5** di kolom `pegawai.password` (kompatibilitas dipertahankan).
- **Token:** string disimpan di kolom `pegawai.token`; diperbarui saat login; divalidasi per-request via POST `token`.
- **Bukan** JWT dari modul `api` (`Jwt_client.php`) — dua jalur autentikasi terpisah.

### Peningkatan masa depan (tanpa memutus mobile sekarang)

- Password: `password_hash` + kolom migrasi bertahap atau dual-verify.
- Token: JWT stateless + refresh, atau token hash di DB.
- Rate limiting pada `login`.

## File terkait CI4

- `app/Services/Mobile/MobileJsonService.php` — `login`, `loginWToken`, `savePassword`
- `app/Libraries/LegacyUtf8Encoder.php` — encoding respons (bukan auth)
