# Sistem Kontrol Akses Berbasis Peran (Role-Based Access Control)

## Overview
Sistem E-Logbook PPDS-2 sekarang mendukung 3 grup user dengan hak akses yang berbeda:

1. **Trainee** - Peserta PPDS-2
2. **Dosen** - Pendidik PPDS-2
3. **Admin** - Administrator Sistem

---

## 1. TRAINEE (Peserta PPDS-2)

### Hak Akses:
- ✅ Dapat melihat logbook **milik sendiri saja**
- ✅ Dapat membuat/edit logbook pribadi
- ✅ Dapat mengubah password sendiri
- ✅ Dapat mengubah profil sendiri
- ❌ TIDAK dapat melihat logbook trainee lain
- ❌ TIDAK dapat mengakses panel admin

### Navigasi:
- Dashboard dengan logbook pribadi
- Menu Profile - Edit data diri dan ganti password
- Menu Settings - Pengaturan pribadi

---

## 2. DOSEN (Pendidik PPDS-2)

### Hak Akses:
- ✅ Dapat melihat logbook **trainee dalam Subspesialisasi yang sama**
- ✅ Dapat melihat logbook **milik sendiri**
- ✅ Dapat mengubah password sendiri
- ✅ Dapat mengubah profil sendiri
- ✅ HANYA dapat melihat:
  - Jika Dosen = "Fertilitas Endokrinologi dan Reproduksi" → hanya trainee dengan subspesialisasi yang sama
  - Jika Dosen = "Fetomaternal" → hanya trainee dengan subspesialisasi yang sama
  - (dan seterusnya untuk 5 subspesialisasi)
- ❌ TIDAK dapat melihat logbook trainee dari subspesialisasi lain
- ❌ TIDAK dapat mengakses panel admin
- ❌ TIDAK dapat mengelola user

### Navigasi:
- Dashboard dengan:
  - Logbook pribadi
  - Logbook trainee dalam subspesialisasi sama
  - Daftar trainee yang dapat diawasi
- Menu Profile - Edit data diri dan ganti password
- Menu Settings - Pengaturan pribadi

---

## 3. ADMIN (Administrator Sistem)

### Hak Akses:
- ✅ Dapat melihat **semua logbook** (semua trainee, semua dosen)
- ✅ Dapat melihat logbook dari **semua subspesialisasi**
- ✅ Dapat mengelola user:
  - Menambah user baru
  - Edit profil user
  - Mengubah grup/peran user (Trainee ↔ Dosen ↔ Admin)
  - Mengaktifkan/Nonaktifkan user
  - Menghapus user
- ✅ Dapat mengubah password sendiri
- ✅ Dapat melihat statistik sistem

### Navigasi:
- Panel Admin khusus dengan:
  - Daftar User + Manajemen User
  - Statistik Sistem
  - Pengaturan Grup User

---

## Arsitektur Teknis

### Database Changes
- **File Migration:** `database/migration_roles.sql`
- **Tabel:** users
- **Perubahan:** `role` ENUM dari ('admin', 'user') menjadi ('admin', 'dosen', 'trainee')

### PHP API Endpoints

#### `php/logbook.php` (NEW - Role-Based Logbook Access)
```
GET /php/logbook.php?action=get_logbooks&year=2026&month=02
- Trainee: Returns hanya logs milik user tersebut
- Dosen: Returns logs milik sendiri + logs trainee dalam subspesialisasi sama
- Admin: Returns semua logs

GET /php/logbook.php?action=get_trainees
- Trainee: Empty list
- Dosen: List trainee dalam subspesialisasi sama
- Admin: List semua trainee

GET /php/logbook.php?action=get_stats&year=2026
- Trainee: Stats logs milik sendiri
- Dosen: Stats logs yang dapat diakses
- Admin: Stats semua logs
```

#### `php/user_management.php` (UPDATED)
```
GET  /php/user_management.php?action=list
POST /php/user_management.php?action=create
POST /php/user_management.php?action=update
POST /php/user_management.php?action=toggle_status
POST /php/user_management.php?action=delete

- Sekarang support field 'role' pada create/update
- Role validation: hanya 'trainee', 'dosen', 'admin'
```

#### `php/session.php` (UPDATED)
- Sekarang mengembalikan `'role'` dalam JSON response

#### `php/login_process.php` (EXISTING - No changes needed)
- Sudah support role field dari database

### Frontend Changes

#### `admin.html`
- Tambahan: Form field "Grup User / Peran" pada modal add/edit user
- Tambahan: Kolom "Grup User / Peran" pada tabel user dengan color-coded badges
- Styling: Role badge dengan warna berbeda
  - Trainee: Blue
  - Dosen: Orange
  - Admin: Red
- Update: editUser() function untuk menerima parameter role

#### `index.html` (Dashboard)
- TIDAK berubah signifikan
- Logbook filtering sekarang dilakukan di backend

#### `js/app.js`
- Tambahan: Global variable `currentUserRole`
- Update: loadStatistics() - sekarang gunakan `php/logbook.php` endpoint
- Update: loadRecentActivities() - sekarang gunakan `php/logbook.php` endpoint  
- Update: renderCalendar() - sekarang gunakan `php/logbook.php` endpoint
- Update: displayRecentActivities() - menampilkan nama user untuk dosen/admin

#### `css/style.css`
- Tambahan: `.activity-user` styling untuk menampilkan nama user pada recent activities
- Tambahan: Role badge styling (`.role-badge.*`)

---

## Alur Penggunaan

### Scenario 1: Trainee Login
1. User login dengan akun trainee
2. Dashboard menampilkan logbook milik sendiri saja
3. Statistics hanya menghitung logbook sendiri
4. Calendar menampilkan hanya aktivitas sendiri
5. Tidak ada akses ke logbook user lain

### Scenario 2: Dosen Login (Subspesialisasi = "Fetomaternal")
1. User login dengan akun dosen
2. Dashboard menampilkan:
   - Logbook milik sendiri
   - Logbook semua trainee dengan subspesialisasi "Fetomaternal"
3. Tidak melihat logbook trainee dari subspesialisasi lain
4. Dapat melihat daftar trainee yang dapat diawasi
5. Recent Activities menampilkan nama trainee untuk setiap log

### Scenario 3: Admin Login
1. User login dengan akun admin
2. Otomatis di-redirect ke panel admin (admin.html)
3. Dapat mengelola semua user
4. Dashboard menampilkan statistik global
5. FUTURE: Dapat melihat semua logbook sistem

---

## Daftar Subspesialisasi yang Sekarang Didukung

1. Fertilitas Endokrinologi dan Reproduksi
2. Fetomaternal
3. Onkologi Ginekologi
4. Obstetri Ginekologi Sosial
5. Uroginekologi

> **Format:** Dosen harus memiliki salah satu subspesialisasi ini untuk dapat melihat trainee terkait.

---

## Testing Checklist

- [ ] Database migration berhasil (check users table role ENUM)
- [ ] Admin dapat melihat tab "Grup User / Peran" pada user form
- [ ] Admin dapat mengubah role user (trainee → dosen → admin)
- [ ] Trainee login - hanya melihat logbook sendiri
- [ ] Dosen login - melihat logbook sendiri + trainee dengan subspesialisasi sama
- [ ] Admin login - diarahkan ke admin.html
- [ ] Recent Activities menampilkan nama user untuk dosen viewing trainee logs
- [ ] Statistics terhitung dengan benar per role

---

## Dokumentasi Lengkap

Lihat file berikut untuk detail implementasi:
- `php/logbook.php` - Role-based access control logic
- `php/user_management.php` - User management dengan role support
- `admin.html` - Admin panel untuk manage user dan role
- `js/app.js` - Dashboard logic dengan role-aware rendering
- `database/migration_roles.sql` - Database schema changes

