263 lines
11 KiB
Markdown
263 lines
11 KiB
Markdown
# User Guide — Panduan Admin
|
|
|
|
Panduan ini untuk **Administrator** atau **Super Admin** yang mengoperasikan aplikasi.
|
|
|
|
---
|
|
|
|
## Login
|
|
|
|
1. Buka `https://domain.com/login`
|
|
2. Masukkan email & password
|
|
3. (Opsional) jika **2FA** diaktifkan, kode 6 digit dikirim ke email — input di halaman `/2fa`
|
|
4. (Opsional) centang **Trust this device** untuk skip 2FA selama 30 hari (cookie aman)
|
|
5. (Opsional) gunakan **Passkey (biometrik)** jika sudah didaftarkan di profil
|
|
6. (Opsional) login via **Google / Facebook / GitHub** jika Social OAuth diaktifkan
|
|
|
|
> Akun default setelah seeder: lihat tabel di README.md. Jika perlu reset, jalankan:
|
|
> ```bash
|
|
> ./vendor/bin/sail artisan db:seed --class=AdminUserSeeder
|
|
> ./vendor/bin/sail artisan cache:clear
|
|
> ```
|
|
|
|
### Rate Limit
|
|
|
|
Untuk mencegah brute force:
|
|
|
|
| Endpoint | Limit |
|
|
|----------|-------|
|
|
| `/login` (web) | 5/menit per IP |
|
|
| `/2fa` verify | 5/menit per IP |
|
|
| `/forgot-password` | dibatasi via Spatie throttle |
|
|
| `/api/v1/login` (mobile) | 10/menit per IP |
|
|
| `/api/v1/otp/send` | 5/menit per IP |
|
|
| `/api/v1/otp/verify` | 10/menit per IP |
|
|
|
|
Jika kena rate limit, response `429 Too Many Requests` — tunggu 1 menit.
|
|
|
|
---
|
|
|
|
## Dashboard
|
|
|
|
Halaman pertama setelah login. Menampilkan statistik sistem secara **real-time** via WebSocket (Laravel Reverb). Jika koneksi WebSocket tidak tersedia, data di-refresh otomatis tiap 30 detik.
|
|
|
|
### Widget Bawaan
|
|
|
|
| Widget | Isi |
|
|
|--------|-----|
|
|
| CPU Load | Persentase penggunaan CPU dengan sparkline |
|
|
| Memory | RAM used/total |
|
|
| Storage | Disk used/total |
|
|
| Live Users | Sesi aktif saat ini |
|
|
| Queue Stats | Job pending/processed/failed |
|
|
| Activity Feed | Log aktivitas terbaru (butuh permission `view health and logs`) |
|
|
| AI Security Insight | Skor keamanan terakhir dari AI analysis (butuh permission `view ai log analysis`) |
|
|
|
|
### Kustomisasi Dashboard
|
|
|
|
1. Klik tombol **Customize** di pojok kanan atas halaman Dashboard
|
|
2. Panel kustomisasi muncul dengan daftar widget:
|
|
- Toggle switch untuk **tampilkan/sembunyikan** setiap widget
|
|
- Drag-and-drop widget untuk **mengubah urutan** tampilan
|
|
3. Klik **Save Layout** — preferensi tersimpan di database per akun
|
|
4. Klik **Reset to Default** untuk kembali ke urutan dan visibilitas bawaan
|
|
|
|
> Preferensi layout **per-user** — setiap admin bisa punya tata letak sendiri.
|
|
|
|
---
|
|
|
|
## Menu Utama
|
|
|
|
### 1. Users — Manajemen Pengguna
|
|
|
|
**Akses:** sidebar → User Management
|
|
|
|
- Tambah / edit / hapus user (soft delete — bisa di-restore)
|
|
- Atur role (Super Admin, Admin, Custom)
|
|
- Aktif / nonaktifkan akun
|
|
- **Bulk action** — aktifkan/nonaktifkan/hapus banyak user sekaligus
|
|
- **Impersonate** — login sebagai user lain untuk debugging
|
|
- Tidak bisa impersonate diri sendiri
|
|
- Tidak bisa impersonate Super Admin/Developer
|
|
- Tidak bisa impersonate user inactive
|
|
- Tidak bisa nested impersonate (loop prevention)
|
|
|
|
> Force delete diri sendiri di-blokir oleh sistem — gunakan akun admin lain bila perlu.
|
|
|
|
### 2. Roles & Permissions
|
|
|
|
**Akses:** sidebar → Access Control
|
|
|
|
- Buat role baru dan pilih permission yang diizinkan
|
|
- **Permission dikelompokkan per kategori** dalam dua panel:
|
|
- Panel kiri (**Available**) — permission yang belum diberikan ke role ini
|
|
- Panel kanan (**Assigned**) — permission yang sudah diberikan
|
|
- Pindahkan dengan **drag-and-drop** atau **double-click** item
|
|
- Gunakan **search** di masing-masing panel untuk filter cepat
|
|
- **Category group headers** muncul otomatis di panel Assigned saat ada permission dari kategori tersebut
|
|
- **85 granular tab permissions** — setiap tab di Global Settings dan Mobile Settings punya permission sendiri (mis. `manage global settings password policy`, `view mobile settings kill switch`)
|
|
- Role dan permission bisa diaktif/nonaktifkan tanpa dihapus
|
|
- Audit trail tersedia: setiap perubahan role/permission tercatat
|
|
- Tidak bisa archive role yang masih dipakai user — pindahkan user dulu
|
|
|
|
### 3. Action Logs — Audit Trail
|
|
|
|
**Akses:** sidebar → Action History
|
|
|
|
Mencatat semua perubahan data: siapa, kapan, apa yang diubah, dari IP mana. Berguna untuk audit & forensik.
|
|
|
|
Sensitive fields (password, token, secret, 2fa_secret) otomatis di-redact dari log entry.
|
|
|
|
---
|
|
|
|
## System Settings
|
|
|
|
### Global Settings
|
|
|
|
**Akses:** System Settings → Global Settings
|
|
|
|
| Tab | Pengaturan |
|
|
|-----|------------|
|
|
| General (Branding) | Nama app, logo, favicon, tagline, footer, landing page visibility, locale |
|
|
| Login Security | Max attempts, lockout duration, 2FA, OTP, captcha (reCAPTCHA v2/v3), passkey (WebAuthn) |
|
|
| Password Policy | Panjang min/max, karakter wajib (uppercase/lowercase/angka/simbol), expiry, riwayat |
|
|
| Social Login / OAuth | Toggle Google/Facebook/GitHub OAuth, client ID & secret, callback URL |
|
|
| IP & Access | Whitelist/blacklist IP admin, CORS, rate limit, force HTTPS, HSTS |
|
|
| Notification | SMTP (host, port, encryption, from address), Telegram bot token & chat ID |
|
|
| AI Config | Provider (GPT/Gemini/Claude/DeepSeek/Grok/Mistral/OpenRouter), API key, model, temperature |
|
|
| SAP Integration | RFC host, system number, client, user, password — termasuk tombol Test Connection |
|
|
| Backup & Storage | Driver (local/S3/GDrive), jadwal, retensi, enkripsi, notifikasi |
|
|
| Maintenance | Toggle, pesan, judul, countdown, secret key, IP whitelist |
|
|
| Legal & Content | Privacy Policy, Terms of Use, About, Security Policy, Help Center (editor WYSIWYG) |
|
|
| Regional | Timezone, format tanggal, format waktu |
|
|
| Session | Driver, lifetime, single session, auto logout, remember me, cookie settings |
|
|
|
|
> Tombol **Save Configuration** selalu muncul di pojok kanan bawah (floating). Setelah save, cache otomatis di-invalidate.
|
|
|
|
### Mobile Settings
|
|
|
|
**Akses:** System Settings → Mobile Settings
|
|
|
|
Kontrol konfigurasi aplikasi mobile dari jarak jauh — warna tema, base URL API, FCM topic, biometric login, kill switch, pesan maintenance mobile, dll. Perubahan langsung tersinkron ke aplikasi mobile via endpoint `/api/v1/mobile/sync` (dengan ETag caching).
|
|
|
|
### Maintenance Mode
|
|
|
|
**Akses:** System Settings → Maintenance (atau via tab di Global Settings)
|
|
|
|
1. Aktifkan toggle **Enable Maintenance Mode**
|
|
2. Isi judul & pesan untuk pengunjung
|
|
3. (Opsional) set **End Time** untuk countdown timer — aplikasi auto-release saat waktu berlalu
|
|
4. (Opsional) isi **Secret Key** — admin bisa tetap akses via `domain.com/{secret}`
|
|
5. (Opsional) isi **IP Whitelist** — IP yang dikecualikan dari maintenance
|
|
6. Klik **Apply Maintenance Settings**
|
|
|
|
> Live preview ditampilkan persis seperti yang dilihat pengunjung.
|
|
|
|
### Backup & Restore
|
|
|
|
**Akses:** System Settings → Backup & Storage
|
|
|
|
- Pilih **driver**: Local / Amazon S3 / Google Drive
|
|
- Atur jadwal backup otomatis, retensi (berapa backup disimpan), dan enkripsi AES-256
|
|
- Operasi: Run Backup Now, Download, Restore, Delete
|
|
- Notifikasi backup bisa dikirim ke email atau webhook
|
|
- Tombol **Test Connection** untuk verifikasi driver sebelum simpan
|
|
|
|
### System Monitoring
|
|
|
|
**Akses:** System Settings → System Monitoring
|
|
|
|
| Tab | Isi |
|
|
|-----|-----|
|
|
| Logs | Laravel error log (filter level, search, download, clear) |
|
|
| SAP Logs | Log integrasi SAP RFC — status request dan error |
|
|
| Mobile Logs | Log yang dikirim dari aplikasi mobile (`/api/v1/mobile/log`) |
|
|
| Background Jobs | Status queue, retry / delete failed jobs |
|
|
| AI Usage | Riwayat penggunaan AI — provider, model, token, waktu |
|
|
| Health | CPU, memory, disk usage secara real-time |
|
|
|
|
### Notification Center
|
|
|
|
**Akses:** sidebar → Notifications (ikon lonceng)
|
|
|
|
Pusat notifikasi sistem real-time via WebSocket (Reverb). Admin bisa:
|
|
|
|
- Melihat notifikasi masuk
|
|
- Menandai sudah dibaca (satu atau semua)
|
|
- Broadcast notifikasi ke semua user atau role tertentu
|
|
|
|
### Session Manager
|
|
|
|
**Akses:** System Settings → Session Manager
|
|
|
|
Lihat semua sesi aktif seluruh user. Bisa memaksa logout user tertentu jika dicurigai kompromi akun.
|
|
|
|
Jika `Single Session` aktif di Global Settings, user otomatis di-logout dari device lama saat login di device baru.
|
|
|
|
---
|
|
|
|
## Profil & Keamanan Akun
|
|
|
|
**Akses:** klik nama/avatar di pojok kanan atas → Profile
|
|
|
|
- Update nama, email, avatar
|
|
- Ganti password (cek policy: min 12, mixed-case, digit, symbol; tidak boleh sama dengan password sebelumnya jika history blocker aktif)
|
|
- Daftarkan / hapus **Passkey (biometrik)**
|
|
- Lihat & cabut sesi aktif
|
|
|
|
### Password Expiry
|
|
|
|
Jika admin mengaktifkan **Password Expiry** di Global Settings → Password Policy, user akan diarahkan ke `/profile/password` saat password lewat masa berlaku, dengan pesan warning.
|
|
|
|
---
|
|
|
|
## Halaman Legal (UU PDP)
|
|
|
|
Halaman publik yang bisa diakses tanpa login:
|
|
|
|
| URL | Konten |
|
|
|-----|--------|
|
|
| `/legal/privacy` | Kebijakan Privasi |
|
|
| `/legal/tos` | Syarat & Ketentuan |
|
|
| `/legal/about` | Tentang Biiproject |
|
|
| `/legal/security` | Kebijakan Keamanan |
|
|
| `/legal/help` | Pusat Bantuan & FAQ |
|
|
|
|
Konten semua halaman ini dikelola via Global Settings → Legal & Content.
|
|
|
|
Jika versi dokumen (`pdp_document_version` atau `tos_document_version`) diperbarui, user yang sudah login akan diarahkan ke halaman **re-agree** (`/legal/re-agree`) dan wajib menyetujui ulang sebelum bisa mengakses aplikasi.
|
|
|
|
---
|
|
|
|
## Tips Operasional
|
|
|
|
1. **Setelah menjalankan seeder**, selalu clear cache: `./vendor/bin/sail artisan cache:clear`
|
|
2. **Backup sebelum update** besar atau perubahan konfigurasi penting
|
|
3. Selalu uji koneksi (Email, SAP, Backup) lewat tombol **Test Connection** sebelum save
|
|
4. Setelah ubah `.env`, jalankan: `./vendor/bin/sail artisan optimize:clear`
|
|
5. Cek **Action Logs** secara berkala untuk audit keamanan
|
|
6. **Maintenance Mode**: selalu set Secret Key agar tidak terkunci dari panel sendiri
|
|
7. **IP Whitelist Admin**: tambahkan dulu IP statis Anda sebelum mengaktifkan, agar tidak terkunci
|
|
8. **2FA**: untuk akun super admin, sangat disarankan diaktifkan
|
|
9. **Single Session**: untuk environment sensitif (PII, finance), aktifkan agar 1 akun = 1 device
|
|
|
|
---
|
|
|
|
## Bantuan & Troubleshooting
|
|
|
|
| Masalah | Solusi |
|
|
|---------|--------|
|
|
| Lupa password admin | `./vendor/bin/sail artisan tinker` → reset via model `User` |
|
|
| Panel tidak responsif / data lama | `./vendor/bin/sail artisan optimize:clear` + `cache:clear` |
|
|
| Error 500 | Cek `storage/logs/laravel.log` atau menu System Monitoring → Logs |
|
|
| Setting yang baru disimpan tidak muncul | `./vendor/bin/sail artisan cache:clear` |
|
|
| User tidak bisa login | Cek status akun di User Management, pastikan role & permission aktif |
|
|
| Notifikasi real-time tidak muncul | Pastikan Reverb berjalan: `supervisorctl status biiproject-reverb` |
|
|
| Dashboard stats tidak update otomatis | Cek koneksi WebSocket di browser DevTools (Console). Jika gagal, refresh — akan fallback ke polling 30 detik. |
|
|
| Widget tersimpan tidak muncul | Buka Customize panel, klik Reset to Default, lalu coba Save Layout ulang. |
|
|
| Tab Settings tidak bisa diakses | Permission tab-level mungkin belum diberikan ke role Anda — minta Super Admin assign via Roles & Permissions. |
|
|
| Kena rate limit terus | Cek IP whitelist admin, tunggu 1 menit, atau reset via `php artisan cache:clear` |
|
|
| 2FA email tidak masuk | Verifikasi SMTP di Global Settings → Notifications + cek log queue |
|
|
| OAuth Google/Facebook gagal | Cek `/auth/callback` reachable (bukan 404), Client ID/Secret valid, redirect URI cocok |
|
|
| Health endpoint return 503 | Buka `/api/health`, lihat field `checks.*` — yang `fail` mengindikasikan dependensi rusak. `warn` masih 200. |
|
|
| User di-logout otomatis | Single-session mungkin aktif (login dari device lain), atau password expired |
|