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_atdiisi) dandeleted_bydiisi 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_bydiisi 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:
- Nama: Diubah menjadi "Anonymous User".
- Email: Diubah menjadi email acak yang unik (misalnya,
[email protected]). - Avatar: Dihapus.
- Role/Permission: Semua dicabut.
- Anonymized At: Timestamp
anonymized_atdiisi.
Kapan Anonimisasi Terjadi
Anonimisasi hanya dipicu untuk pengguna yang menghapus diri sendiri melalui dua cara:
- Otomatis (30 hari): melalui command
AnonymizeDeletedUsersCommand. - 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.