Skip to content

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

EntitasDeskripsi
SettingPenyimpanan key-value yang diorganisir berdasarkan module, group, dan key. Digunakan untuk semua pengaturan sistem dan per-modul.
Role & PermissionKontrol akses via Spatie Permission / Filament Shield. Mendefinisikan apa yang bisa dilihat, dibuat, diedit, atau dihapus oleh pengguna.
Activity LogJejak audit polimorfik yang mencatat semua pembuatan, pembaruan, dan penghapusan di setiap model.
ApprovalSistem persetujuan alur kerja polimorfik. Mendukung approver berbasis role dan pengguna.
AssetAbstraksi penyimpanan file/media yang mendukung disk lokal dan penyedia cloud ImageKit.
ContactInformasi kontak terenkripsi (telepon, email, media sosial) yang disimpan dengan aman dan mendukung sensor.
Master DataJenis 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:

  1. Saat membaca, sistem pertama-tama memeriksa cache Redis. Jika ditemukan, nilai cache (dengan type casting yang tepat) dikembalikan segera.
  2. Jika cache tidak ditemukan, tabel settings akan di-query. Nilai mentah di-cast sesuai dengan kolom type (boolean, integer, json, atau string).
  3. Nilai yang sudah di-cast disimpan di Redis selama 60 menit, lalu dikembalikan.
  4. Saat menulis, semua key setting yang di-cache akan dihapus untuk memastikan konsistensi.

Alur Pemeriksaan Izin RBAC

Penjelasan:

  1. Saat pengguna mencoba melakukan tindakan, sistem pertama-tama memeriksa autentikasi.
  2. Key izin di-resolve dari resource/halaman Filament (misalnya, ViewGeneral:SystemSetting).
  3. Middleware Filament Shield memeriksa gate otorisasi terhadap peran yang diberikan ke pengguna.
  4. Pengguna super admin melewati semua pemeriksaan izin.
  5. Akses yang tidak sah menghasilkan respons 403 Forbidden.

Alur Pencatatan Aktivitas

Penjelasan:

  1. Trait HasLog mendaftarkan listener event Eloquent untuk created, updated, dan deleted.
  2. Saat pembaruan, field timestamp umum (updated_at) dikecualikan. Hanya perubahan berarti yang dicatat.
  3. Entri log mencakup pengguna yang bertindak, tipe tindakan, deskripsi, nilai lama/baru (untuk pembaruan), alamat IP, dan user agent.
  4. Semua log disimpan di tabel activity_logs dengan 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

KolomTipeDeskripsi
modulestringLingkup modul (misal: core, mail)
groupstringGrup dalam modul (misal: general, location)
keystringKey unik dalam module+group
valuetextNilai yang disimpan (di-cast oleh type)
typeenumstring, json, integer, boolean

Unique constraint: (module, group, key)

activity_logs

KolomTipeDeskripsi
user_iduuid FKAktor yang melakukan tindakan
loggable_typestringMorphs: nama class model
loggable_iduuidMorphs: ID model
actionstringcreated, updated, atau deleted
propertiesjsonNilai lama/baru untuk pembaruan

approvals

KolomTipeDeskripsi
approvable_typestringMorphs: nama class model
approvable_iduuidMorphs: ID model
approver_typestringrole atau user
approver_namestringNama peran atau identitas pengguna
minimum_approvalsintJumlah 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