Modul System
Ringkasan
Modul System adalah tulang punggung administratif platform Sutomo. Modul ini menyediakan layanan dan konfigurasi fundamental yang digunakan oleh semua modul lainnya — manajemen pengaturan, kontrol akses, pencatatan audit, alur kerja persetujuan, manajemen aset, data master, dan enkripsi kontak.
Berbeda dengan modul domain-spesifik (Hiring, Academic, Financial), modul System bersifat lintas-potong: layanannya dikonsumsi oleh semua modul lain. Modul ini memastikan konfigurasi yang konsisten, keamanan, dan observabilitas di seluruh aplikasi.
Entitas Kunci
| Entitas | Deskripsi |
|---|---|
| Setting | Penyimpanan key-value yang diorganisir berdasarkan module, group, dan key. Digunakan untuk semua pengaturan sistem dan per-modul. |
| Role & Permission | Kontrol akses via Spatie Permission / Filament Shield. Mendefinisikan apa yang bisa dilihat, dibuat, diedit, atau dihapus oleh pengguna. |
| Activity Log | Jejak audit polimorfik yang mencatat semua pembuatan, pembaruan, dan penghapusan di setiap model. |
| Approval | Sistem persetujuan alur kerja polimorfik. Mendukung approver berbasis role dan pengguna. |
| Asset | Abstraksi penyimpanan file/media yang mendukung disk lokal dan penyedia cloud ImageKit. |
| Contact | Informasi kontak terenkripsi (telepon, email, media sosial) yang disimpan dengan aman dan mendukung sensor. |
| Master Data | Jenis Kelamin, Suku, Agama, Lokalisasi — data referensi fundamental yang digunakan di seluruh sistem. |
Konsep
Modul System beroperasi pada beberapa prinsip kunci:
1. Konfigurasi Terpusat
Semua pengaturan disimpan dalam satu tabel settings dengan hierarki module / group / key. Ini memungkinkan bagian mana pun dari sistem — dari konfigurasi email hingga pratinjau tema — dikelola melalui antarmuka yang konsisten. Model Setting mencakup caching otomatis (TTL 60 menit) dan type casting (boolean, integer, json, string).
2. Arsitektur Polimorfik
Baik Activity Logs maupun Approvals menggunakan relasi polimorfik (morphMany). Ini berarti model apa pun dalam sistem dapat dicatat atau disetujui tanpa memodifikasi modul System — cukup terapkan trait HasLog atau trait approval.
3. Kontrol Akses Berbasis Peran (RBAC)
Sistem menggunakan Filament Shield yang membungkus Spatie Permission. Izin mengikuti konvensi penamaan: {action}{Resource}:{Module} (misalnya, ViewGeneral:SystemSetting, EditMail:SystemSetting). Setiap resource/halaman Filament mendeklarasikan izin yang diperlukan.
4. Penyimpanan Kontak Aman
Kontak dienkripsi saat disimpan menggunakan enkripsi Laravel. Kolom censored menyimpan versi yang aman untuk ditampilkan (misalnya, user***@***.com), sementara nilai lengkap disimpan terenkripsi di kolom encrypted.
Diagram Alir (Flowchart)
Alur Baca/Tulis Setting
Diagram alir berikut mengilustrasikan bagaimana pengaturan dibaca, di-cache, dan ditulis:
Penjelasan:
- Saat membaca, sistem pertama-tama memeriksa cache Redis. Jika ditemukan, nilai cache (dengan type casting yang tepat) dikembalikan segera.
- Jika cache tidak ditemukan, tabel
settingsakan di-query. Nilai mentah di-cast sesuai dengan kolomtype(boolean, integer, json, atau string). - Nilai yang sudah di-cast disimpan di Redis selama 60 menit, lalu dikembalikan.
- Saat menulis, semua key setting yang di-cache akan dihapus untuk memastikan konsistensi.
Alur Pemeriksaan Izin RBAC
Penjelasan:
- Saat pengguna mencoba melakukan tindakan, sistem pertama-tama memeriksa autentikasi.
- Key izin di-resolve dari resource/halaman Filament (misalnya,
ViewGeneral:SystemSetting). - Middleware Filament Shield memeriksa gate otorisasi terhadap peran yang diberikan ke pengguna.
- Pengguna super admin melewati semua pemeriksaan izin.
- Akses yang tidak sah menghasilkan respons 403 Forbidden.
Alur Pencatatan Aktivitas
Penjelasan:
- Trait
HasLogmendaftarkan listener event Eloquent untukcreated,updated, dandeleted. - Saat pembaruan, field timestamp umum (
updated_at) dikecualikan. Hanya perubahan berarti yang dicatat. - Entri log mencakup pengguna yang bertindak, tipe tindakan, deskripsi, nilai lama/baru (untuk pembaruan), alamat IP, dan user agent.
- Semua log disimpan di tabel
activity_logsdengan relasi polimorfik ke model sumber.
Diagram Alir Data (DFD)
Level 0 — Konteks Sistem
Level 1 — Pengelola Setting
Level 1 — Mesin Persetujuan
Diagram Aktivitas — Siklus Hidup Manajemen Setting
Database
Entity Relationship Diagram
Tabel Kunci
settings
| Kolom | Tipe | Deskripsi |
|---|---|---|
module | string | Lingkup modul (misal: core, mail) |
group | string | Grup dalam modul (misal: general, location) |
key | string | Key unik dalam module+group |
value | text | Nilai yang disimpan (di-cast oleh type) |
type | enum | string, json, integer, boolean |
Unique constraint: (module, group, key)
activity_logs
| Kolom | Tipe | Deskripsi |
|---|---|---|
user_id | uuid FK | Aktor yang melakukan tindakan |
loggable_type | string | Morphs: nama class model |
loggable_id | uuid | Morphs: ID model |
action | string | created, updated, atau deleted |
properties | json | Nilai lama/baru untuk pembaruan |
approvals
| Kolom | Tipe | Deskripsi |
|---|---|---|
approvable_type | string | Morphs: nama class model |
approvable_id | uuid | Morphs: ID model |
approver_type | string | role atau user |
approver_name | string | Nama peran atau identitas pengguna |
minimum_approvals | int | Jumlah persetujuan yang diperlukan |
File Kunci
app/
├── Models/Platform/
│ ├── Setting/Setting.php # Penyimpanan key-value dengan caching
│ ├── ActivityLog/ActivityLog.php # Jejak audit polimorfik
│ ├── Approval/Approval.php # Sistem persetujuan alur kerja
│ ├── Asset/Asset.php # Abstraksi penyimpanan file/media
│ ├── Contact/Contact.php # Penyimpanan kontak terenkripsi
│ ├── Gender/Gender.php # Data referensi jenis kelamin
│ ├── Ethnicity/Ethnicity.php # Data referensi suku
│ ├── Religion/Religion.php # Data referensi agama
│ └── Localization/Localization.php # Data referensi lokal/bahasa
│
├── Traits/Common/
│ ├── HasLog.php # Pencatatan otomatis pada event model
│ ├── HasAsset.php # Trait relasi aset
│ └── HasContact.php # Trait relasi kontak
│
├── Services/Common/
│ └── IdentifierAppService.php # Pemeriksaan status & kesehatan sistem
│
├── Services/Asset/
│ ├── AssetService.php # Unggah/hapus/render aset
│ └── ImageKitService.php # Penyedia cloud ImageKit
│
├── Services/Otp/
│ └── OtpService.php # Generate & verifikasi OTP
│
├── Filament/Clusters/SystemSettings/ # UI pengaturan admin
│ ├── SystemSettingsCluster.php
│ └── Pages/
│ ├── ManageGeneralSettings.php # Pengaturan sistem umum
│ └── ManageMailSettings.php # Konfigurasi email
│
└── database/migrations/
└── v1_0_0/
└── 001_migrate_platform.php # Pembuatan tabel platform