Lewati ke konten utama

Penghapusan & Anonimisasi Pengguna

Dokumen ini menjelaskan pendekatan sistem dalam menangani penghapusan pengguna: Soft-Deletion untuk pemulihan akun dan Anonimisasi untuk kepatuhan privasi (GDPR).

Ringkasan

Aplikasi membedakan antara penghapusan yang dilakukan oleh pengguna (self-deletion) dan yang dilakukan oleh administrator (admin-deletion/suspension).

Penghapusan Mandiri (Pemulihan Akun)

  • Pemicu: Pengguna mengklik "Hapus Akun" di pengaturan Profil.
  • Efek Langsung: Akun di-soft-delete (deleted_at diisi) dan deleted_by diisi dengan ID pengguna itu sendiri.
  • Perilaku Login: Pengguna dapat melihat petunjuk "Pulihkan Akun?" di halaman login.
  • Masa Tenggang: Pengguna memiliki waktu 30 hari untuk memulihkan akun mereka sebelum dianonymize secara otomatis.
  • Notifikasi: Tautan pemulihan dikirim melalui email jika diminta dari halaman login.

Penghapusan oleh Admin (Penangguhan/Ban)

  • Pemicu: Administrator menghapus pengguna dari dashboard Filament.
  • Efek Langsung: Akun di-soft-delete dan deleted_by diisi dengan ID Admin.
  • Perilaku Login: Pengguna diblokir dari login. Mereka tidak dapat melihat petunjuk "Pulihkan Akun?". Mereka akan melihat pesan: "Akun ini telah ditangguhkan atau dihapus oleh administrator. Silakan hubungi dukungan."
  • Anonimisasi: Akun yang dihapus oleh admin tidak akan dianonymize secara otomatis. Hal ini menjaga data mereka untuk keperluan audit atau potensi pemulihan oleh admin di kemudian hari.

Logika Anonimisasi

Anonimisasi adalah proses pembersihan data pribadi sambil tetap menjaga record untuk integritas database (misalnya, menjaga relasi).

Cara Kerja

Saat pengguna dianonymize:

  1. Nama: Diubah menjadi "Anonymous User".
  2. Email: Diubah menjadi email acak yang unik (misalnya, [email protected]).
  3. Avatar: Dihapus.
  4. Role/Permission: Semua dicabut.
  5. Anonymized At: Timestamp anonymized_at diisi.

Kapan Anonimisasi Terjadi

Anonimisasi hanya dipicu untuk pengguna yang menghapus diri sendiri melalui dua cara:

  1. Otomatis (30 hari): melalui command AnonymizeDeletedUsersCommand.
  2. Force Delete: Jika admin mencoba melakukan "Force Delete" pada user yang aslinya menghapus diri sendiri, sistem akan mengintersepsi dan melakukan anonimisasi alih-alih hard-delete.

[!NOTE] Jika admin melakukan force-delete pada pengguna yang bukan menghapus diri sendiri (misalnya, dihapus oleh admin sebelumnya), maka record tersebut akan benar-benar dihapus secara permanen (hard-delete) dari database.


Detail Teknis

Model

  • User::isDeletedBySelf()
  • User::isDeletedByAdmin()
  • User::deletedBy() (Relasi)

Kolom Database

  • deleted_by (UUID, nullable): Menyimpan ID orang yang melakukan penghapusan.

Command

php artisan app:anonymize-deleted-users

Command ini berjalan setiap hari (lihat bootstrap/app.php) untuk memproses pengguna yang telah di-soft-delete selama lebih dari 30 hari.