- Memperbaiki fungsi export data pengguna dengan format yang lebih rapi
- Update semua controller (Permissions, Positions, Roles, Users) untuk konsistensi response dan error handling
- Tambahan fungsi `goPage(1)` pada event listener pencarian untuk langsung ke halaman pertama saat melakukan pencarian
- Mengubah properti `user` dari `public` menjadi `protected` di semua controller terkait:
- **PermissionsController**
- **PositionsController**
- **RolesController**
- **UsersController**
- Menghapus inisialisasi manual user dengan `Auth::guard('web')->user()` dari konstruktor.
- Menambahkan middleware:
- `auth` untuk memastikan bahwa hanya pengguna yang telah login dapat mengakses controller.
- Middleware tambahan anonim untuk mengassign properti `user` setelah middleware `auth` dijalankan.
- Mengganti respons `abort(403)` menjadi respons JSON yang lebih informatif di beberapa controller:
- **PermissionsController**
- Penyesuaian pada metode penghapusan dan pengambilan data untuk datatable.
- Menampilkan pesan error dan status success=false jika pengguna tidak memiliki izin.
- **PositionsController**
- Perubahan serupa diterapkan pada metode penghapusan posisi dan pengambilan data untuk datatable.
- **RolesController**
- Penyesuaian dilakukan pada metode pengambilan data untuk datatable.
- **UsersController**
- Ubah logika pada metode penghapusan dan pengambilan data pengguna ke JSON.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Perbaikan Izin Akses**:
- Mengganti kunci permission pada beberapa metode agar lebih konsisten:
- `usermanagement.store` menjadi `usermanagement.create` (store).
- `usermanagement.edit` menjadi `usermanagement.update` (edit/update).
- `usermanagement.read` tetap diatur sesuai context (index/view).
- Menambahkan `abort(403)` pada metode yang belum memiliki pengecekan izin untuk memastikan keamanan.
- **Peningkatan Fitur**:
- Menambahkan fitur ekspor pada `PermissionsController`, `PositionsController`, `RolesController`, dan `UsersController`:
- Cek validasi izin sebelum melakukan ekspor.
- Mendukung pengunduhan file Excel.
- **Optimalisasi Logika**:
- Menggabungkan properti `user` di semua controller dengan mendefinisikannya melalui konstruktor.
- Menghapus redundansi load user menggunakan `Auth::guard('web')->user()` di setiap metode.
- Menyederhanakan pengaturan logging aktivitas untuk setiap operasi CRUD.
- **Penyesuaian & Penambahan**:
- Menambahkan slug `restore` ke daftar permission terkait untuk operasi pemulihan yang diimplementasikan.
- Menghapus komentar kode yang tidak digunakan dan mendokumentasikan ulang logika penting untuk lebih jelas.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Perbarui file `module.json`:
- Menambahkan path baru pada array `files` untuk memuat helper: `app/Helpers/RolePermission.php`.
- Tambahkan helper baru `RolePermission.php`:
- Fungsi `check_permission`:
- Mengecek apakah pengguna yang terautentikasi memiliki permission tertentu.
- Mendukung opsi untuk mengembalikan respons `abort(403)` jika permission tidak valid.
- Fungsi `user_has_role`:
- Mengecek apakah pengguna yang terautentikasi memiliki salah satu role dari daftar yang diberikan.
- Membandingkan nama role pengguna dengan array input menggunakan mekanisme intersect.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Mengganti penggunaan `Wildside\Userstamps\Userstamps` dengan `Mattiverse\Userstamps\Traits\Userstamps`:
- Pada model `User`.
- Pada model `Base`.
- Perubahan ini mengatasi masalah kompatibilitas dengan dependensi lama dan memastikan penggunaan fitur userstamps tetap berfungsi dengan baik.
- Memperbarui UsersController:
- Mengaktifkan middleware untuk menginisialisasi pengguna yang terautentikasi.
- Mengubah nama izin dari pola 'users.*' menjadi 'usermanagement.*' untuk konsistensi.
- Menggunakan Storage Facade untuk operasi penyimpanan file tanda tangan.
- Menambahkan validasi untuk direktori sebelum menyimpan file baru.
- Mengubah metode untuk memberikan respons JSON pada penghapusan pengguna.
- Memperbarui views/users/index.blade.php:
- Menghapus dropdown filter yang tidak digunakan.
- Menambahkan tombol Export to Excel dan Add User dengan styling yang diperbarui.
- Menambahkan file `UsersControllerTest` untuk memastikan kelengkapan pengujian:
- Pengujian CRUD (Create, Read, Update, Delete) pengguna.
- Pengujian pagination, sorting, dan filtering untuk datatable.
- Pengujian pengelolaan file tanda tangan pengguna (penyimpanan baru dan penghapusan tanda tangan lama).
- Pengujian pemulihan untuk soft-deleted users.
- Pengujian validasi peran dan izin untuk setiap tindakan.
- Memastikan konsistensi dan reliabilitas proses pengelolaan pengguna melalui pengujian otomatis.
- Mengubah logika akses `PermissionsController` dengan:
- Menambahkan konstruktor untuk mendefinisikan user yang terautentikasi.
- Mengganti logika permission check dari `permissions.*` ke `usermanagement.*`.
- Menambahkan validasi `abort` untuk operasi CRUD jika user tidak memiliki hak akses.
- Memperbarui respons penghapusan permission menjadi JSON yang lebih semantik.
- Memperbarui `PermissionGroup` untuk:
- Menambahkan mekanisme auto-generated slug saat membuat instance baru.
- Memperbaiki export logic pada `PermissionExport` dengan:
- Mengonversi array `roles` ke collection sebelum menggunakan fungsi `pluck`.
- Menambahkan soft delete pada model `Permission`, memungkinkan penghapusan data non-permanen.
- Menghapus elemen filter dropdown di view `permissions.index` untuk meningkatkan clarity UI.
- Menambahkan comprehensive test suite pada `PermissionsControllerTest` untuk:
- Menguji validasi CRUD pada permission dengan role dan tanpa role.
- Menguji restore permissions yang terhapus.
- Menguji filter, pencarian, dan sorting pada datatables.
- Menguji export permissions.
Perubahan ini meningkatkan pengelolaan permission, validasi akses, dan memperkaya pengujian untuk memastikan kualitas fitur permission management.
- Menambahkan pengecekan lebih rinci ketika pengguna mencoba mengakses, membuat, mengubah, atau menghapus role berdasarkan perizinan spesifik (usermanagement.read, usermanagement.create, dll.).
- Menghapus komentar kode yang tidak digunakan pada metode middleware.
- Menggunakan class Exception secara konsisten untuk penanganan error dan pengembalian pesan error di seluruh metode.
- Memperbaiki komentar dan dokumentasi kode agar lebih relevan dengan implementasi saat ini.
- Menyederhanakan dan mengoptimasi pengaturan sorting pada data roles, termasuk sorting case-insensitive.
- Menyesuaikan kunci perizinan dari 'roles.*' menjadi 'usermanagement.*' untuk kesesuaian dengan grup perizinan.
test(roles): menambah RolesControllerTest dengan cakupan pengujian mendalam
- Membuat pengujian lengkap untuk semua metode di RolesController, termasuk pengujian izin akses, proses penyimpanan, penghapusan, dan pemulihan role.
- Menambahkan pengujian untuk fitur datatables: pencarian, penyortiran, dan pengambilan data yang benar.
- Menguji validasi perizinan granular untuk membuat, mengedit, menghapus, dan memulihkan role.
- Memastikan respon API sesuai ekspektasi saat pengguna tidak memiliki izin yang dibutuhkan.
- Memastikan penghapusan lunak dan mekanisme pemulihan role berfungsi seperti yang diharapkan.
- Menghapus konstruktor PositionsController untuk middleware autentikasi yang tidak digunakan.
- Mengganti izin `positions.*` menjadi `usermanagement.*` di semua fungsi untuk konsistensi otorisasi.
- Menambahkan validasi untuk memastikan posisi tidak dapat dihapus jika memiliki role terkait.
- Mengoptimalkan logika pada paginasi di API datatables, termasuk default page dan size.
- Menyesuaikan response error saat gagal hapus posisi dengan redirect ke halaman index.
- Menambahkan pengujian unit dan fitur terhadap CRUD dan otorisasi PositionsController:
- Menguji akses halaman index, create, edit, dan delete posisi.
- Validasi penyimpanan, pembaruan, dan penghapusan posisi terhadap izin pengguna.
- Menguji akses eksport dan fungsionalitas datatables API.
- Validasi posisi tidak terhapus jika terikat dengan role.
- Modifikasi form pembuatan role:
- Tambahkan class `tomselect` pada elemen dropdown posisi.
- Update label tingkat jabatan pada tampilan opsi dropdown.
- Pembaruan tabel pada halaman list role:
- Tambah kolom baru: "Position" dan "Tingkat Jabatan".
- Kolom baru dapat diurutkan.
- Update logika pencarian dan pengurutan:
- Izinkan pencarian berdasarkan nama posisi dan tingkat jabatan.
- Tambahkan pengurutan data berdasarkan nama posisi dan tingkat jabatan dengan join table `positions`.
- Perbaikan pada paginasi dan penghitungan data:
- Revisi query agar menghindari duplikasi data akibat join tabel.
- Ekspor data:
- Tambahkan informasi kolom baru "Position" dan "Tingkat Jabatan" pada file Excel hasil ekspor.
- Perbarui header dan pengaturan format kolom pada file Excel.
Perubahan ini memperluas fleksibilitas pada manajemen role dengan menambahkan dimensi posisi dan tingkat jabatan baik dalam tampilan UI maupun data backend.
- Tambahkan relasi posisi dengan menambahkan kolom `position_id` pada tabel roles melalui migrasi.
- Perbarui fungsi pada `RolesController` untuk menyertakan posisi dalam proses CRUD.
- Gunakan model `Position` untuk mendapatkan daftar posisi baik saat membuat maupun mengedit role.
- Sesuaikan nama permission dari `roles.view` ke `roles.read`, `roles.store` ke `roles.create`, dan `roles.edit` ke `roles.update` agar konsisten.
- Perbarui validasi di `RoleRequest` untuk mendukung input `position_id`.
- Tambahkan properti `position_id` ke atribut `fillable` di model Role untuk mendukung mass assignment.
- Buat fungsi relasi `position()` pada model Role untuk mereferensikan ke model Position.
- Perbarui tampilan form role (`create.blade.php`):
- Tambahkan dropdown untuk memilih posisi dalam form input.
- Tampilkan informasi level posisi bersama dengan nama posisi dalam dropdown.
- Sinkronisasi validasi dan nilai default sesuai dengan pengaturan posisi.
- Perbaikan minor pada query pencarian data roles, menggunakan `whereRaw` untuk pencarian case-insensitive.
- Ubah pencarian pada `PermissionsController` dan `UsersController`:
- Gunakan metode `whereRaw` dengan `LOWER` untuk pencocokan case-insensitive pada kolom `name` dan `email`.
- Tambahkan `HasFactory` pada model `User` agar mendukung pembuatan data dummy menggunakan factory.
- Implementasi fungsi `newFactory()` pada model `User` untuk merujuk ke UserFactory.
- Tambahkan file factory baru (`UserFactory`) untuk model `User`:
- Definisikan state default seperti `name`, `email`, `password`, dan `nik` untuk keperluan pembuatan data dummy.
- Gunakan password secara default terenkripsi dengan `bcrypt`.
- Tambahkan model `Position` dengan atribut `code`, `name`, `level`, serta logging aktivitas dan relasi ke `roles`.
- Tambahkan migrasi untuk membuat tabel `positions` dengan soft deletes.
- Tambahkan `PositionExport` untuk kebutuhan ekspor data posisi ke Excel dengan penyaringan berdasarkan kata kunci.
- Buat `PositionsController` untuk CRUD posisi, termasuk validasi, ekspor, dan data API untuk DataTables.
- Metode: `index`, `create`, `store`, `edit`, `update`, `destroy`, `export`, `dataForDatatables`.
- Tambahkan validasi berbasis request `PositionRequest` untuk memastikan data valid sebelum disimpan/diubah.
- Tambahkan tampilan blade untuk daftar posisi (`index.blade.php`) dan form tambah/edit posisi (`create.blade.php`) dengan dukungan DataTables dan SweetAlert.
- Perbarui file `module.json` untuk menambahkan menu "Positions" di User Management.
- Tambahkan breadcrumbs untuk halaman posisi (daftar, tambah, edit) di file `breadcrumbs.php`.
- Perbarui `routes/web.php` untuk menambahkan route terkait posisi.
Fitur ini memungkinkan pengelolaan posisi lengkap termasuk CRUD, ekspor, dan integrasi dengan DataTables.
- Mengubah impor model Branch dari `Modules\Lpj\Models\Branch` menjadi `Modules\Basicdata\Models\Branch`.
- Perubahan ini memastikan file menggunakan namespace yang benar agar sesuai dengan struktur modul yang telah diperbarui.
Mengubah query di UsersController untuk mengambil data roles. Memperbarui tampilan di users/index.blade.php untuk menampilkan kolom role dengan informasi yang sesuai.
Menambahkan logika sorting berdasarkan `sortOrder` dan `sortField` jika ada pada permintaan. Selain itu, memindahkan perhitungan total record ke posisi yang lebih tepat untuk menghindari pengaruh dari pagination.
- Fix Form Validation for Check Password, if null password not changed
- Update Validation NIK on Update user data
- Fix Role Not Assign if value is id not role name
- Change User Migration, change password field to nullable