0% menganggap dokumen ini bermanfaat (0 suara)
185 tayangan

Tutorial CodeIgniter

Tutorial ini membahas cara membuat sistem autentikasi dengan membuat tabel user, level, dan menu di database untuk mengelola hak akses pengguna. Langkahnya meliputi membuat form login, validasi login menggunakan CodeIgniter, membuat library auth untuk otorisasi, serta menampilkan menu sesuai level pengguna yang login.
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
185 tayangan

Tutorial CodeIgniter

Tutorial ini membahas cara membuat sistem autentikasi dengan membuat tabel user, level, dan menu di database untuk mengelola hak akses pengguna. Langkahnya meliputi membuat form login, validasi login menggunakan CodeIgniter, membuat library auth untuk otorisasi, serta menampilkan menu sesuai level pengguna yang login.
Hak Cipta
© Attribution Non-Commercial (BY-NC)
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 10

Tutorial CodeIgniter : Authentication System

Ehm ehmkali ini, saya akan menjelaskan tentang authentication system. Sebenarnya saya bingung mau diberi judul apa , yasudahlah ini saja. Intinya nanti saya akan membahas tentang bagaimana membuat prosedur

login user, manajemen role/level dan manajemen menu. Saya pikir ketiga hal tersebut adalah satu paket di dalam sebuah authentication system (ya ga sih? ).

Catatan

: Agar

lebih

memudahkan

Anda,

silakan

download

sampel

kode

: auth_system.zip

Namun demikian, agar mengetahui detail penggunaan kode, disarankan Anda tetap mengikuti tutorial ini.

Di dalam sebuah sistem informasi, bahkan selevel CMS pun, role management adalah hal yang mutlak harus ada. Contohnya saja wordpress, yang memiliki 6 role, dari level teratas Super Admin sampai level terendah, Subscriber. Tentu saja, setiap role (level) ini memiliki wewenang tersendiri. Wewenang ini dapat pula beririsan, misalnya saja, level Editor boleh melakukan wewenang milik level Author.

Pada gambar di atas, jelas tergambar konsep role management dalam sebuah aplikasi. Kita akan mencoba membuat hal semacam itu, dengan konsep menu dan level. Intinya, menu yang kita buat, akan memiliki daftar level yang boleh mengaksesnya.

Mempersiapkan Tabel di Database


Ada tiga tabel yang akan kita buat, yaitu user, level, dan menu. Langsung saja, berikut sql querynya. -- ----------------------------- Table structure for `user` -- ---------------------------CREATE TABLE `user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `user_nama` varchar(100) NOT NULL, `user_username` varchar(100) NOT NULL, `user_password` varchar(100) NOT NULL, `user_level` int(5) NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ----------------------------- Records of `user` -- ---------------------------BEGIN; INSERT INTO `user` VALUES ('1', 'Amanda Putri', 'amanda', '827ccb0eea8a706c4c34a16891f84e7b', '1'), ('2', 'Betty Prameswari', 'betty', '827ccb0eea8a706c4c34a16891f84e7b', '2'), ('3', 'Cahya Wulandari', 'cahya', '827ccb0eea8a706c4c34a16891f84e7b', '3'); COMMIT; -- ----------------------------- Table structure for `level` -- ---------------------------CREATE TABLE `level` ( `level_id` int(5) NOT NULL AUTO_INCREMENT, `level_nama` varchar(100) NOT NULL, PRIMARY KEY (`level_id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ----------------------------- Records of `level` -- ---------------------------BEGIN; INSERT INTO `level` VALUES ('1', 'Root'), ('2', 'Administrator'), ('3', 'Operator'); COMMIT; -- ----------------------------- Table structure for `menu` -- ---------------------------CREATE TABLE `menu` ( `menu_id` int(11) NOT NULL AUTO_INCREMENT, `menu_nama` varchar(100) NOT NULL, `menu_uri` varchar(100) NOT NULL, `menu_allowed` varchar(100) NOT NULL, PRIMARY KEY (`menu_id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ----------------------------- Records of `menu` -- ---------------------------BEGIN; INSERT INTO `menu` VALUES ('1', 'Manajemen Menu', 'home/manajemen_menu', '+1+'), ('2', 'Manejemen User', 'home/manajemen_user', '+1+2+'), ('3', 'Input Transaksi', 'home/input_transaksi', '+1+2+3+'); COMMIT;

Setelah query dijalankan, kita akan memiliki ketiga tabel tersebut. Berikut tampilannya.

Tabel user berfungsi menyimpan data user yang boleh log in di sistem kita (dengan informasi login di kolom username dan password). Password dienkripsi dengan fungsi MD5.

Tabel level menyimpan data level untuk membedakan wewenang user.

Tabel Menu menyimpan semua data menu yang ada di sistem yang diasosiasikan dengan level, yaitu di kolommenu_allowed. Kolom tersebut menjelaskan bahwa menu tersebut hanya boleh diakses oleh LEVEL dengan level_id yang dipisahkan dengan tanda +.

Login ke Sistem
Selanjutnya kita akan membuat prosedur user yang akan login ke sistem. Kita sudah memiliki tabel user, yang tentu cukup sebagai informasi login system. Pertama-tama, buat view yang berisi form login. Catatan: Sebelum melanjutkan, 1. Bagi Anda yang belum pernah menggunakan library form validation CI, saya menyarankan Anda untuk membaca user guide : Form Validation, 2. Karena tutorial ini memerlukan layout (tampilan) sistem, maka Anda perlu mengikuti tutorial sebelumnya, Tutorial CodeIgniter : Membuat Template <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');?> <?php echo form_open('home/login');?> <div class='title'>Login Form</div> <?php // hanya untuk menampilkan informasi saja if(isset($login_info)) { echo "<span style='background-color:#eee;padding:3px;'>"; echo $login_info; echo '</span>'; } ?> <table> <tr> <td>Username</td> <td> <?php echo form_input('username',set_value('username')); echo form_error('username');

?> </td> </tr> <tr> <td>Password</td> <td> <?php echo form_password('password'); echo form_error('password'); ?> </td> </tr> <tr> <td></td> <td><?php echo form_submit('submit','LOGIN');?></td> </tr> </table> <?php echo form_close(); Sudah? Good, lets go ahead. Simpan kode di atas ke dalam folder application/views/admin/ dengan nama login_form.php. Seperti yang dapat Anda lihat di baris ke-3 kode di atas, form login tersebut diarahkan ke controller home, fungsi login. Silakan buka file controller home.php yang telah kita buat di tutorial sebelumnya, Tutorial CodeIgniter : Membuat Template. Modifikasi file tersebut dengan kode sbb. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Home extends CI_Controller { public function __construct() { parent::__construct(); } public function index() { if($this->auth->is_logged_in() == false) { $this->login(); } else { $this->template->set('title','Welcome user! | MyWebApplication.com'); $this->template->load('template','admin/index'); } } public function login() { $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Username', 'trim|required'); $this->form_validation->set_rules('password', 'Password', 'trim|required'); $this->form_validation->set_error_delimiters(' <span style="color:#FF0000">', '</span>'); if ($this->form_validation->run() == FALSE) { $this->template->set('title','Login Form | MyWebApplication.com'); $this->template->load('template','admin/login_form'); } else

{ $username = $this->input->post('username'); $password = $this->input->post('password'); $success = $this->auth->do_login($username,$password); if($success) { // lemparkan ke halaman index user redirect('home/index'); } else { $this->template->set('title','Login Form | MyWebApplication.com'); $data['login_info'] = "Maaf, username dan password salah!"; $this->template->load('template','admin/login_form',$data); } } } } Jika Anda sudah membaca dan memahami user guide untuk form validation library, tentu kode di atas akan langsung dapat Anda tangkap dengan cepat. Intinya adalah, user login diarahkan ke fungsi login, lalu username dan password yang dimasukkan tersebut akan melewati dua kali validasi. Validasi pertama dilakukan oleh form validation class, yang akan mengevaluasi rules yang sudah kita berikan (dalam hal ini adalah required, artinya harus diisi). Lapis kedua adalah validasi database. Untuk validasi database dilakukan oleh library auth. Loh? Mana library-nya? Sabar, ini dia kodenya. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * Auth library * * @author Anggy Trisnawan */ class Auth{ var $CI = NULL; function __construct() { // get CI's object $this->CI =& get_instance(); } // untuk validasi login function do_login($username,$password) { // cek di database, ada ga? $this->CI->db->from('user'); $this->CI->db->where('user_username',$username); $this->CI->db->where('user_password=MD5("'.$password.'")','',false); $result = $this->CI->db->get(); if($result->num_rows() == 0) { // username dan password tsb tidak ada return false; } else { // ada, maka ambil informasi dari database $userdata = $result->row(); $session_data = array( 'user_id' => $userdata->user_id, 'nama' => $userdata->user_nama, 'level' => $userdata->user_level ); // buat session

$this->CI->session->set_userdata($session_data); return true; } } // untuk mengecek apakah user sudah login/belum function is_logged_in() { if($this->CI->session->userdata('user_id') == '') { return false; } return true; } // untuk validasi di setiap halaman yang mengharuskan authentikasi function restrict() { if($this->is_logged_in() == false) { redirect('home/login'); } } } Nah, simpan kode di atas dengan nama auth.php dan tempatkan di folder application/libraries/. Saya rasa penjelasannya cukup lewat code comments. Jika Anda merasa ada yang kurang jelas, silakan tulis di komentar .

Terakhir, update file view index.php (yang juga sudah kita buat pada tutorial sebelumnya), dengan kode berikut. <?php if ( ! defined('BASEPATH')) exit('No direct script access

allowed');?> <div class='title'>Dashboard</div> Welcome, <?php echo $this->session->userdata('nama');?>

Perhatian: Agar tutorial kali ini dapat berjalan tanpa error, pastikan:

Autoload Library : session, database, auth (tutorial ini), template (tutorial sebelumnya) Autoload Helper : url, form Mengisi $config['encryption_key'] pada application/config/config.php

Oke, sampai di sini kita sudah memiliki paket user login. Silakan cek di browser, http://localhost/folder_aplikasi/index.php/home Cobalah login dengan salah satu username dan password yang sudah kita buat, oh ya, passwordnya adalah: 12345 (di database terenkripsi MD5). Jika berhasil, maka Anda akan dilarikan ke halaman dashboard yang masih kosong, hanya ada tampilan ucapan selamat datang.

Catatan: Untuk mengakomodasi kelanjutan tutorial ini, silakan login dengan: username : amanda password : 12345

Menampilkan Menu Spesifik untuk User


Cieeyang sudah berhasil buat login system? Hehe jangan senang dulu, mari kita lanjutkan. Sampai disini, user hanya disuguhkan halaman dashboard yang kosong. Wah, kasian amat ya? Mari kita tampilkan menumenu untuk para user, sesuai dengan levelnya masing-masing. Lets start. Kita akan memakai model untuk melakukan query ke database (tabel menu). <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Usermodel extends CI_Model { public function get_menu_for_level($user_level) { $this->db->from('menu'); $this->db->like('menu_allowed','+'.$user_level.'+'); $result = $this->db->get(); return $result; } } Simpan kode di atas dengan nama usermodel.php dan tempatkan di folder application/models/. Selanjutnya, modifikasi fungsi index yang ada di controller home seperti berikut ini. public function index() { if($this->auth->is_logged_in() == false) { $this->login(); } else { // load model 'usermodel' $this->load->model('usermodel'); // level untuk user ini $level = $this->session->userdata('level'); // ambil menu dari database sesuai dengan level $data['menu'] = $this->usermodel->get_menu_for_level($level); $this->template->set('title','Welcome user! | MyWebApplication.com'); // tampilkan halaman dashboard dengan data menu $this->template->load('template','admin/index',$data); }

} Nah, terakhir, modifikasi view admin/index.php sbb. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');?> <div class='title'>Dashboard</div> Welcome, <?php echo $this->session->userdata('nama');?> <br /><br /> Menu yang tersedia untuk Anda : <ul> <?php foreach($menu->result() as $row) { echo '<li>'.anchor($row->menu_uri,$row->menu_nama).'</li>'; } ?> </ul> Thats it. Silakan test dengan merefresh halaman (jika anda sudah login, jika belum maka loginlah terlebih dahulu sebelum Anda diloginkan :halah). Sampai disini, menu untuk user tersebut telah ditampilkan, tetapi, halaman yang dituju untuk setiap menu itu belum ada. Sebagai contoh, lihatlah kolom menu_uri di tabel menu, itulah controller/fungsi yang perlu Anda sediakan. Di tulisan ini akan saya contohkan untuk satu menu saja, yaitu manajemen menu. Namun, tampilannya nanti hanya tampilan dummy saja. Anda perlu membuat tampilan sendiri sesuai dengan menu tsb. Biasanya, untuk manajemen menu, mungkin bisa ditampilkan data menu, kemudian ada form input menu dsb. Yang terpenting disini adalah Anda memahami konsep pembuatan sebuah halaman menu.

Untuk membuat halaman menu, Anda perlu membuat fungsi di dalam controller, sesuai dengan kolom menu_uri yang Anda masukkan dalam tabel menu. Misalnya saja untuk menu Manajemen menu, yang memiliki menu_uri : home/manajemen_menu, maka Anda perlu membuat fungsi manajemen_menu pada controller home. Kode untuk fungsi ini saya contohkan sbb. public function manajemen_menu() { // mencegah user yang belum login untuk mengakses halaman ini $this->auth->restrict(); // mencegah user mengakses menu yang tidak boleh ia buka $this->auth->cek_menu(1); // tampilkan isi menu manajemen menu (mungkin tabel menu/input form menu) $this->template->set('title','Manajemen User | MyWebApplication.com'); $this->template->load('template','admin/manajemen_menu'); } Tambahkan fungsi tersebut pada controller home. Nah, untuk fungsi di atas, terdapat fungsi cek_menu milik library auth. Ya, memang kita belum memilikinya, oleh karenanya, edit library auth.php dengan menambahkan fungsi berikut. // untuk mengecek menu function cek_menu($idmenu)

{ $this->CI->load->model('usermodel'); $status_user = $this->CI->session->userdata('level'); $allowed_level = $this->CI->usermodel->get_array_menu($idmenu); if(in_array($status_user,$allowed_level) == false) { die("Maaf, Anda tidak berhak untuk mengakses halaman ini."); } } Fungsi cek_menu() tersebut membutuhkan parameter $idmenu, yang dapat Anda lihat di tabel menu, kolom menu_id. Eittlagi-lagi ada fungsi yang belum dibuat, yaitu get_array_menu milik usermodel. Okelah ayo kita buat dulu, buka file model usermodel.php dan tambahkan fungsi berikut. function get_array_menu($id) { $this->db->select('menu_allowed'); $this->db->from('menu'); $this->db->where('menu_id',$id); $data = $this->db->get(); if($data->num_rows() > 0) { $row = $data->row(); $level = $row->menu_allowed; $arr = explode('+',$level); return $arr; } else { die(); } } Terakhir, buat file viewnya. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');?> <div class='title'>Manajemen Menu</div> Ini adalah halaman untuk memanajemen menu. Sekian terima kasih.

Simpan kode di atas di folder application/views/admin/ dengan nama manajemen_menu.php.

Yaywere done! Coba klik menu Manajemen Menu (menu ini akan muncul hanya jika Anda login menggunakan user amanda).

Membuat Link Logout


Sebagai penutup tutorial ini, kita akan membuat prosedur logout. Logout pada dasarnya adalah menghapus data session yang dimiliki oleh user yang login. Untuk hal ini kita membutuhkan tambahan fungsi di library auth, dan fungsi di controller home. // untuk logout function do_logout() { $this->CI->session->sess_destroy(); } Tambahkan fungsi tersebut pada library auth.php. Kemudian, buka controller home dan tambahkan fungsi berikut. function logout() { if($this->auth->is_logged_in() == true) { // jika dia memang sudah login, destroy session $this->auth->do_logout(); } // larikan ke halaman utama redirect('home'); } Thats it. Untuk menambahkan link logout, buka file index.php dan tempatkan kode berikut dimanapun Anda suka. <?php echo anchor('home/logout','Logout');?> Congratulation, youve completed my tutorial. If theres a question, please write as a comment, Ill be glad to help you. Thanks for your kind attention .

Anda mungkin juga menyukai