بِسْمِ اللَّهِ Mudah-mudahan tutorial Myth:Auth Bagian 1 groups dan permissions ini bermanfaat
Setelah tutorial Codeigniter 4 – Login multiuser dengan library Myth:Auth dan bagi yang sudah Codeigniter 4 – Merubah tampilan Myth:Auth.
Sekarang User sudah berhasil login pada sistem/aplikasi yang kita buat, sekarang waktunya untuk memilah dan memilih juga mengelompok user berikut hak aksesnya. Hak akses disini bisa dibuat per kelompok (groups). Tutorial berikut ini adalah lanjutannya yaitu pembuatan grup dan pengaturan hak akses.
Seperti biasa ini yang harus dilakukan sebelumnya
Persiapan Myth:Auth Bagian 1 groups dan permissions
Untuk bisa melanjutkan pastikan sudah ada ini:
Editor yang digunakan adalah Visual Studio Code
Project Codeigniter dengan library Myth:Auth didalamnya, tutorialnya bisa dilihat Codeigniter 4 Login multiuser dengan library Myth:Auth
Bagi yang sudah Codeigniter 4 – Merubah tampilan Myth:Auth
Pembuatan Grup
Untuk sementara tambahkan grup langsung di tabel auth_groups, mungkin lain waktu bisa ditambahkan untuk CRUD data grup ini. Disini saya menggunakan phpmyadmin, buka phpmyadmin dan pastikan aktif di database yang benar. Kemudian tambahkan 2 atau 3 grup, disini contohnya: administrator dan user. Silakan ditambahkan melalui Insert seperti tampilan ini
Atau bisa juga melalui script sql seperti ini
INSERT INTO `auth_groups` (`id`, `name`, `description`) VALUES (NULL, 'administrator', 'Administrator'), (NULL, 'user', 'User');
Grup default
Setelah dibuatkan grup, sekarang terapkan grup tersebut untuk user. Dengan menambahkan grup default untuk user yang baru register.
Contoh: Jadi waktu register user langsung diberikan grup “user” (nama grup “user” harus sama dengan yg ada di tabel grup yang tadi dibuat, bisa disesuaikan dengan keinginan Anda).
Cari \vendor\myth\auth\src\Config\Auth.php, kemudian update $defaultUserGroup, dengan kondisi diatas, yang harus dilakukan adalah update seperti ini
public $defaultUserGroup = 'user';
Penerapan grup pada user baru
Buka browser kemudian dengan alamat register kemudian isikan pada layar ini data user baru (email, nama user dan password). Semua diisi dan jangan sampai kosong, kemudian klik tombol Register
Jika menemukan konfirmasi seperti ini artinya Myth:Auth menggunakan Email Activator. User yang diinputkan sudah berhasil masuk ke dalam tabel dan perlu aktivasi untuk bisa menggunakan user tersebut.
Cek pada tabel dengan phpmyadmin, perhatikan baris ketiga. User sudah masuk tapi active=0 ini artinya user perlu di aktivasi
Bisa juga disini diseting waktu register user tanpa perlu aktivasi yaitu dengan merubah seting pada \vendor\myth\auth\src\Config\Auth.php dibagian requireActivation. Defaultnya
public $requireActivation = 'Myth\Auth\Authentication\Activators\EmailActivator';
Ubah menjadi
public $requireActivation = false;
Sekarang coba input user dengan setingan diatas yaitu register tanpa aktivasi. Biasanya setelah sukses register user akan diarahkan ke halaman login. Cek juga ke tabel user maka akan didapati user yang baru active=1 artinya user sudah bisa langsung login. Sedangkan pada tabel auth_groups_users otomatis juga user dimasukkan grup default yaitu grup user
Permissions
Untuk mencoba permission masuk ke phpmyadmin dan input manual ke tabel auth_groups_users untuk grup “administrator” seperti gambar dibawah
Ubah atau remark ‘login’ pada bagian $globals di file \app\Config\Filters.php, sehingga seperti ini
public $globals = [
'before' => [
// 'honeypot',
// 'csrf',
//'login',
],
'after' => [
'toolbar',
// 'honeypot',
],
];
Kemudian tambahkan pembatasan atau restricting berdasarkan alamat URL seperti ini pada file \app\Config\Routes.php
$routes->get('/', 'Home::index');
$routes->get('news/index', 'News::index', ['filter' => 'role:administrator, user']);
$routes->get('news/add', 'News::add', ['filter' => 'role:administrator']);
Dengan kondisi seperti diatas
- Baris pertama artinya link root url dalam hal ini http://localhost:8080/ atau bisa juga http://www.namadomain.com akan bisa diakses oleh semua user meskipun tanpa perlu login
- Baris kedua artinya link http://localhost:8080/news/index hanya bisa diakses oleh user yang login terlebih dahulu dengan role/grup administrator dan user
- Baris kedua artinya link http://localhost:8080/news/add hanya bisa diakses oleh user yang login terlebih dahulu dengan role/grup administrator saja
Coba login dengan grup/role user kemudian buka http://localhost:8080/news/add kemudian muncul error seperti ini
Disini sebenarnya tidak ada yang salah, ini adalah exception karena user tidak punya permission atau tidak punya akses untuk url tersebut. Hal ini bisa diatasi dengan mengarahkan ke root url atau url lain yang bisa diakses user tersebut. Caranya dengan mengupdate file \vendor\myth\auth\src\Filters\RoleFilter.php, cari tulisan seperti pada gambar diatas kemudian update dengan script berikut ini
$redirectURL = session('redirect_url') ?? '/';
return redirect()->to($redirectURL);
//throw new PermissionException(lang('Auth.notEnoughPrivilege'));
Dengan kondisi seperti diatas, jika ada error seperti tadi maka akan diarahkan ke root url dalam hal ini http://localhost:8080/
Untuk mencoba mungkin bisa dicoba tampilan menunya seperti ini, atau mungkin Anda tentunya lebih mengerti untuk kebutuhan yang ada diweb Anda.
Demikian dulu, silakan dicoba dan mudah-mudahan bisa bermanfaat