CI4 Admin Panel - CRUD Generator - Auth - Role Permission - Multi-language
Project ini adalah starter kit berbasis CodeIgniter 4 untuk membangun aplikasi web dengan fitur autentikasi, manajemen user, role, menu, bahasa, dan pengaturan website yang cukup lengkap.
Fitur Utama
- Auth lengkap: login, register, logout, lupa password, reset password, verifikasi email
- Social login: Google dan Facebook
- CAPTCHA untuk login, register, forgot password, dan reset password
- Dashboard control panel
- Account settings: update profil, ganti password, dan request perubahan email
- CRUD Generator untuk membuat modul secara cepat dari panel admin
- Input `table_name` sekarang bisa pilih dari tabel existing via dropdown, lalu otomatis terisi ke field nama tabel
- Live Database untuk kelola tabel, data, query builder, preset query, dan history query langsung dari control panel
- Column Builder dengan system field `id`, `created_at`, dan `updated_at` yang tampil tapi terkunci
- Dynamic API per tabel di `/api/live/{table}` tanpa generate controller per tabel
- API Docs per tabel dari aksi Live Database, termasuk contoh curl, JSON payload, upload file, filter tanggal, soft delete scope, restore, dan error response
- API Token Management per tabel dengan permission `read`, `create`, `update`, dan `delete`
- Bearer token bisa ditampilkan kembali dengan show/hide dari halaman token management
- Response API menormalisasi tipe data: file menjadi array object, multi select/checkbox menjadi array, boolean menjadi true/false, number/currency menjadi angka
- Response relasi menambahkan object label, misalnya `customer_id` tetap ada dan `customer` berisi `table`, `key`, dan `label`
- Upload file lewat `multipart/form-data` atau JSON payload berbasis URL file
- Soft delete API mendukung `scope=active`, `scope=deleted`, `scope=all`, restore row, dan cleanup file fisik saat hard delete
- Chat realtime untuk komunikasi user dari control panel
- Halaman chat di `cp/chat`
- Private chat dan group conversation
- Search user dan search conversation
- Realtime message via Socket.IO relay di folder `realtime-service`
- Online presence, unread badge, read receipt, dan browser notification
- Reply message, delete message, dan delete conversation dari daftar chat user
- Upload attachment image, video, dan file
- Link preview otomatis untuk URL di pesan
- Cache conversation/message di browser dengan IndexedDB agar chat terasa lebih cepat
- Notification Center realtime
- Dropdown notifikasi di navbar dengan unread badge
- Browser notification dan sound notification
- API notifikasi di `/api/notifications/*`
- Mark as read dan mark all as read
- Notification Templates untuk membuat template notifikasi berbasis `template_key`
- Test notification ke user login atau beberapa user dari control panel
- Email Templates untuk mengelola template email auth/account dari control panel
- CRUD template berdasarkan `template_key`
- Preview template email
- Integrasi `EmailTemplateRenderer` untuk kirim email langsung atau lewat queue
- Job Queue untuk memproses pekerjaan background
- Driver database dan RabbitMQ
- Worker CLI `php spark queue:work`
- Monitor job dari control panel
- Retry, run manual, cancel, delete, clear completed job, test job, dan generate handler job
- Manajemen user:
- CRUD user dengan form create/edit berbasis modal
- Soft delete, restore, dan force delete
- Bulk action
- Import Excel dan export Excel
- Preview / impersonate user untuk melihat tampilan akun tertentu
- Upload avatar user dan generate ukuran otomatis
- Tracking last login dan metode login terakhir
- Opsi keamanan ganda via email per user
- Pilihan role menggunakan Select2
- Manajemen role
- Manajemen menu
- Mapping role-menu untuk kontrol akses
- Manajemen bahasa dan phrase/translation yang lebih lengkap
- Switch bahasa aktif
- Website settings:
- General setting
- System setting untuk session driver file, Redis local, dan Redis cloud
- Cache setting untuk file, Redis, dan Memcached
- Job Queue setting untuk database queue dan RabbitMQ
- SEO metadata
- Social auth setting
- SMTP email setting
- Authentication policy
- Default role untuk user baru
- CAPTCHA setting
- Chat upload policy untuk ekstensi, ukuran maksimal, mode single/multiple, dan batas jumlah file per kategori
- Query Builder blacklist tables
- Upload asset seperti logo/favicon
- Footer branding
- Test email dari control panel
- Permission-based access control untuk area control panel
- Dukungan multi-language
Stack yang Dipakai
- Backend:
- PHP 8.2
- CodeIgniter 4.x
- MySQLi
- Node.js 20+ untuk realtime Socket.IO relay
- Package / Library:
- kenjis/ci4-attribute-routes
- predis/predis
- php-amqplib/php-amqplib
- phpoffice/phpspreadsheet
- laminas/laminas-escaper
- psr/log
- express
- socket.io
- Frontend:
- Bootstrap 5
- jQuery
- DataTables
- Select2
- Font Awesome
- Socket.IO client
- IndexedDB untuk cache chat di browser
- Dev tools:
- PHPUnit
- PHPStan
- Rector
Demo
https://ci4-starterkit-demo.azdev.us.to
U : admin
P : admin123
Struktur Modul
- Auth
- Control Panel
- Users
- Roles
- Menus
- Role Menus
- Languages
- Website Settings
- Live Database
- Chat
- Notification Templates
- Email Templates
- Job Queue
Instalasi Singkat
1. Jalankan `composer install`
2. Copy dan sesuaikan file `.env`
3. Atur koneksi database pada `.env`
4. Jalankan migrasi dan seeder jika diperlukan
5. Jalankan project dengan `php spark serve`
Catatan
- URL dasar project di-detect otomatis dari `HTTP_HOST` dan protocol pada `app/Config/App.php`
- Aktifkan mode demo lewat `.env` dengan `app.demoMode = true` untuk membuat area control panel read-only
- Jika ingin mengembalikan data default, jalankan `php spark demo:reset`
- Project ini menggunakan pengaturan bahasa dan timezone dari website settings
- Project ini juga mendukung pengaturan session driver `file`, `redis_local`, atau `redis_cloud` dari website settings pada tab `System`
- Session Redis menggunakan library `predis/predis`, sehingga Redis local dan Redis Cloud bisa dipakai tanpa ekstensi PHP Redis
- Untuk Redis Cloud, isi host, port, username, password, database index, timeout, persistent connection, dan TLS sesuai endpoint provider
- Field Redis Database adalah index Redis seperti `0`, bukan nama database yang tampil di dashboard Redis Cloud
- Jika akses Redis Cloud terasa lambat, aktifkan persistent connection dan gunakan TLS hanya jika endpoint Redis memang membutuhkan TLS
- Cache aplikasi bisa memakai driver `file`, `redis`, atau `memcached` dari Website Settings > System > Cache
- Job Queue bisa memakai driver `database` atau `rabbitmq`; jalankan worker dengan `php spark queue:work`
- RabbitMQ memakai library `php-amqplib/php-amqplib` dan membutuhkan koneksi host, port, username, password, vhost, exchange, routing key, serta opsi SSL bila diperlukan
- Email auth default seperti verifikasi register, lupa password, 2FA, dan perubahan email bisa dicustom lewat menu Email Templates
- Chat API tersedia di `/api/chat/*` dan realtime relay Node.js tersedia di folder `realtime-service`
- Notification API tersedia di `/api/notifications/*` dan memakai realtime relay yang sama dengan chat
- Untuk realtime chat/notifikasi, set `CHAT_SOCKET_SECRET`, `CHAT_INTERNAL_SECRET`, `CHAT_SOCKET_URL`, dan `CHAT_SOCKET_PUBLIC_URL` di `.env`; nilai secret harus sama dengan `realtime-service/.env`
- Variabel `REALTIME_SERVICE_URL`, `REALTIME_SERVICE_PUBLIC_URL`, `REALTIME_SOCKET_SECRET`, dan `REALTIME_INTERNAL_SECRET` juga didukung sebagai alias konfigurasi realtime
- Pastikan folder `writable` punya permission yang sesuai