Tutorial kali ini akan membahas tutorial authentication login multilevel php dengan framework Codeigniter. Menariknya selain multi level pada admin, juga bisa digunakan untuk login 2 tabel.
Sebelum mengikuti tutorial ini silahkan melakukan setting pada Codeingiter terlebih dahulu lihat postingan sebelumnya di sini.
cari file database.php di application/config/database.php dan tambahkan sintak berikut agar bisa terkoneksi dengan database
'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'db_mydatabase',
NB : Nama database bisa diganti sesuai keinginan
1. Buat Table Database
Buatlah 2 tabel yang akan digunakan untuk menampung data hak akses login.
a. Buat Tabel Admin
CREATE TABLE `admin` ( `admin_id` int(11) NOT NULL, `admin_name` varchar(40) NOT NULL, `admin_username` varchar(20) NOT NULL, `admin_password` varchar(50) NOT NULL, `level` varchar(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Masukkan data Admin pada tabel Admin, contoh:
| admin_id | admin_name | admin_username | admin_password | level |
| 1 | Andreas Dan | dan | 827ccb0eea8a706c4c34a16891f84e7b | Manager |
| 2 | Caroline Diana | diana | 827ccb0eea8a706c4c34a16891f84e7b | Customer Service |
b. Buat Tabel Customer
CREATE TABLE `customer` ( `customer_id` int(11) NOT NULL, `customer_name` varchar(40) NOT NULL, `customer_username` varchar(20) NOT NULL, `customer_password` varchar(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Masukkan data Customer pada tabel Customer, contoh:
| admin_id | admin_name | admin_username | admin_password |
| 1 | Michael Nakula | nakula | 827ccb0eea8a706c4c34a16891f84e7b |
| 2 | Mark Sadewa | sadewa | 827ccb0eea8a706c4c34a16891f84e7b |
NB : kolom password adalah dengan hasil fungsi MD5 dari “12345”
2. Views untuk Login
Tulisakan kode berikut ini pada file di dalam folder views. Beri nama page_auth.php
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS from Online-->
<!--<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> -->
<!-- Bootstrap CSS from Assets Folder-->
<link rel="stylesheet" href="<?php echo base_url()?>assets/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-sm-9 col-md-7 col-lg-5 mx-auto">
<div class="card card-signin my-5">
<div class="card-body">
<form class="form-signin" method="post" action="<?php echo base_url()?>auth/login">
<h1 class="card-title text-center">Login</h1>
<br>
<?php echo $this->session->flashdata('msg');?>
<div class="form-label-group">
<input type="text" class="form-control" name="username" placeholder="Username" required autofocus>
<label></label>
</div>
<div class="form-label-group">
<input type="password" class="form-control" name="password" placeholder="Password" required autofocus>
<label></label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
3. Models untuk Login
Tulisakan kode berikut ini pada file di dalam folder models. Beri nama Dataauth.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Dataauth extends CI_Model {
function auth_admin($username,$password){
$sql = $this->db->query("SELECT * FROM admin WHERE admin_username = '$username' AND admin_password = md5('$password') LIMIT 1");
return $sql;
}
function auth_customer($username,$password){
$sql = $this->db->query("SELECT * FROM customer WHERE customer_username = '$username' AND customer_password = md5('$password') LIMIT 1");
return $sql;
}
}
4. Controllers untuk Login
Tulisakan kode berikut ini pada file di dalam folder Controllers. Beri nama Auth.php
<?php
class Auth extends CI_Controller{
function __construct(){
parent::__construct();
$this->load->model('dataauth');
}
function index(){
$this->load->view('page_auth');
}
function login(){
$username = htmlspecialchars($this->input->post('username',TRUE),ENT_QUOTES);
$password = htmlspecialchars($this->input->post('password',TRUE),ENT_QUOTES);
$check_admin = $this->dataauth->auth_admin($username,$password);
$check_customer = $this->dataauth->auth_customer($username,$password);
if($check_admin->num_rows() == 1){ //table Admin
foreach($check_admin->result() as $data){
$user_data = array(
'id' => $data->admin_id,
'name' => $data->admin_name,
'username' => $data->admin_username,
'level' => $data->level
);
$this->session->set_userdata($user_data);
}
if ($this->session->userdata('level') == 'Manager')
{
redirect('page_manager');
}
else if ($this->session->userdata('level') == 'Customer Service')
{
redirect('page_cs');
}
else
{
$text = '<div class="alert alert-danger" role="alert">Kombinasi Username dan Password Salah!</div>';
echo $this->session->set_flashdata('msg',$text);
redirect('auth');
}
}
elseif($check_customer->num_rows() == 1){ //table Customer
foreach($check_customer->result() as $data){
$user_data = array(
'id' => $data->customer_id,
'name' => $data->customer_name,
'username' => $data->customer_username,
'level' => 'Customer'
);
$this->session->set_userdata($user_data);
}
redirect('page_customer');
}
else {
$text = '<div class="alert alert-danger" role="alert">Kombinasi Username dan Password Salah!</div>';
echo $this->session->set_flashdata('msg',$text);
redirect('auth');
}
}
function logout()
{
$this->session->sess_destroy();
redirect('auth');
}
}
Sember referensi belajar materi authentication ini beberapa script dari www.fikri.com dan www.malesngoding.com
5. View untuk Dashboard
Tulisakan kode berikut ini pada file di dalam folder views. Beri nama page_user.php
NB : page_user.php akan dipakai bersama oleh 3 Controller, jadi filnya cukup membuat 1 saja.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS from Online-->
<!--<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> -->
<!-- Bootstrap CSS from Assets Folder-->
<link rel="stylesheet" href="<?php echo base_url()?>assets/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-sm-9 col-md-7 col-lg-5 mx-auto">
<div class="card card-signin my-5">
<div class="card-body">
<h3 class="card-title text-center">Welcome to your page!</h3>
<ul>
<li>Name : <?php echo $this->session->userdata('name') ?></li>
<li>Username : <?php echo $this->session->userdata('username') ?></li>
<li>Level : <?php echo $this->session->userdata('level') ?></li>
</ul>
<a href="<?php echo base_url()?>auth/logout">Logout</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
6. Controllers untuk Dashboard
Ada 3 Controller masing-masing untuk 3 user, yaitu halaman manager, customer service, dan customer.
a. Tulisakan kode berikut ini pada file di dalam folder Controllers. Beri nama page_manager.php
<?php
class Page_manager extends CI_Controller{
function __construct(){
parent::__construct();
//user bukan level 'Manager' ditolak
if ($this->session->userdata('level') !== 'Manager')
{ redirect('auth/logout','refresh');}
}
function index(){
$this->load->view('page_user');
}
}
Lihat script di bawah ini, artinya controller akan me-load view, yaitu page_user.php (tuliskan di script tanpa ekstensi .php)
$this->load->view('page_user');
b. Tulisakan kode berikut ini pada file di dalam folder Controllers. Beri nama page_cs.php
<?php
class Page_cs extends CI_Controller{
function __construct(){
parent::__construct();
//user bukan level 'Customer Service' ditolak
if ($this->session->userdata('level') !== 'Customer Service')
{ redirect('auth/logout','refresh');}
}
function index(){
$this->load->view('page_user');
}
}
c. Tulisakan kode berikut ini pada file di dalam folder Controllers. Beri nama page_customer.php
<?php
class Page_customer extends CI_Controller{
function __construct(){
parent::__construct();
//user bukan level 'Customer' ditolak
if ($this->session->userdata('level') !== 'Customer')
{ redirect('auth/logout','refresh');}
}
function index(){
$this->load->view('page_user');
}
}
Di bawah ini Link demo dan download
Admin
- Level Manager (username : dan | password : 12345)
- Level Customer Service (username : diana | password : 12345)
Customer
- Customer 1 (username : nakula | password : 12345)
- Customer 2 (username : sadewa | password : 12345)
