adems / dapur-dashboard
Modul dashboard untuk Dapur AdeMS: login dan halaman pengelolaan
Requires
- php: ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0
- composer-runtime-api: ^2.0
- ext-session: *
- laminas/laminas-db: ^2.22
- laminas/laminas-diactoros: ^3.9
- mezzio/mezzio: ^3.28
- mezzio/mezzio-router: ^3.0 || ^4.0
- mezzio/mezzio-template: ^3.0
- psr/container: ^1.1 || ^2.0
Requires (Dev)
- adems/dapur-multiwebsite: ^1.1
- phpunit/phpunit: ^11.5
Suggests
- adems/dapur-multiwebsite: Diperlukan untuk halaman daftar website dan dashboard per website
Provides
None
Conflicts
None
Replaces
None
README
Modul dashboard untuk Dapur AdeMS: login dan halaman pengelolaan. Dashboard bisa dipakai sebagai dashboard utama di inti Dapur, atau sebagai dashboard milik satu website.
Kebutuhan
- Dapur AdeMS 2.6 atau lebih baru (layout dengan tempat menu di navbar)
- MariaDB atau MySQL yang sudah diatur di
config/autoload/database.local.php(SQLite juga bisa dipakai) - adems/dapur-multiwebsite 1.1 atau lebih baru, untuk halaman daftar website dan dashboard per website
Pemasangan
Tulis paketnya di composer.local.json, lalu jalankan composer update:
{
"require": {
"adems/dapur-dashboard": "^1.0"
}
}
Buat tabel dan admin pertama dari folder inti. Kata sandi diketik tanpa terlihat; minimal 12 karakter untuk admin dan 8 karakter untuk user lain:
vendor/bin/dapur-dashboard pasang
vendor/bin/dapur-dashboard buat-admin admin@contoh.com --nama="Nama Lengkap"
Lalu aktifkan salah satu lapis di bawah, dan hapus cache konfigurasi.
Dua lapis dashboard
Dashboard utama
Berada di alamat /, dengan tambahan halaman yang menyangkut semua website. Aktifkan di
config/modul.local.php milik inti:
return [ AdeMS\Dapur\Dashboard\DashboardUtamaConfigProvider::class, ];
Dengan multi-website aktif, dashboard utama hanya tampil pada host yang tercantum di 'dashboard' pada
config/multiwebsite.local.php. Domain website tidak memiliki halaman ini.
Dashboard website
Berada di alamat /dashboard, sehingga halaman / tetap milik website. Aktifkan di config/website.php milik
website tersebut:
return [ 'judul' => 'Contoh', 'modul' => [AdeMS\Dapur\Dashboard\ConfigProvider::class], ];
Admin dashboard website dibuat dengan opsi --website:
vendor/bin/dapur-dashboard buat-admin admin@contoh.com --website=contoh.com
Akses diberikan per lingkup: admin dashboard utama tidak otomatis bisa masuk ke dashboard website, dan sebaliknya. Website yang tidak mengaktifkan modul ini tidak memiliki alamat dashboard.
Pengaturan
Tulis di config/autoload/*.php, milik inti atau milik website:
return [ 'dashboard' => [ 'alamat_dasar' => '/admin', // alamat dashboard 'batas_diam' => 3600, // detik tanpa aktivitas sebelum dikeluarkan 'layout' => 'layout::default', // template tata letak 'menu' => [ // ditambahkan ke menu bawaan ['label' => 'Laporan', 'rute' => 'laporan', 'ikon' => 'bar-chart'], ], ], 'templates' => [ 'paths' => [ 'dashboard' => [__DIR__ . '/../../templates/dashboard'], // menimpa template bawaan ], ], ];
Website bisa memakai database sendiri lewat config/autoload/*.local.php miliknya. Untuk dashboard yang sama
sekali berbeda, buat modul sendiri di folder module/ website tanpa paket ini.
Perintah
vendor/bin/dapur-dashboard pasang # membuat tabel yang belum ada, aman diulang vendor/bin/dapur-dashboard buat-admin <email> # membuat admin, atau menambah akses user yang sudah ada vendor/bin/dapur-dashboard ganti-sandi <email> # mengganti kata sandi
pasang melaporkan setiap tabel: dibuat atau sudah ada. Tabel yang sudah ada beserta isinya tidak
diubah; perintah ini tidak pernah menghapus tabel.
Bila email pada buat-admin sudah terdaftar, perintah memastikan user itu punya akses ke lingkup yang
dituju, lalu menawarkan ganti kata sandi dengan jawaban bawaan "tidak". Tawaran ini hanya muncul bila
perintah dijalankan di terminal; dari skrip, kata sandi tidak diubah.
Session disimpan di data/cache/session/, jadi folder data/cache/ harus bisa ditulis web server.
Keamanan
- Kata sandi disimpan sebagai hash bcrypt.
- Cookie session memakai HttpOnly dan SameSite=Lax, ditambah Secure pada HTTPS. ID session diganti saat login.
- Semua form memakai token CSRF. Keluar hanya bisa lewat POST.
- Login gagal dibatasi per akun dan per IP selama 15 menit.
- Status dan hak akses user diperiksa ulang pada setiap request.
- Setelah login, user diarahkan kembali ke halaman dashboard yang diminta sebelumnya. Alamat itu disimpan di session, bukan di URL, dan hanya alamat di dalam dashboard yang diterima.
Uji
composer test
Lisensi
BSD-3-Clause. Lihat LICENSE.md.