Tutorial kali ini, sesuai dengan banyaknya request dari pembaca
Nurwahyudin.Com (thanks all ^_^), yaitu tentang Hak Akses. Dalam tutorial ini juga kita gunakan materi dari dua tutorial sebelumnya, yaitu insert data dan login. Semoga cukup dapat membantu rekan-rekan yang sedang memerlukan materi ini.
Untuk mencoba
demo aplikasi, gunakan
admin sebagai username dan password untuk login sebagai administrator.
Untuk dapat mengikuti tutorial kali ini, silahkan Anda download dulu file sourcefiles yang saya sertakan untuk tutorial ini. Ini karena ada beberapa file yang saya sertakan sebagai alat bantu dalam tutorial kali ini.
Rencana Aplikasi
- Jenis user: Admin, Registered User, Guest (guest adalah user yang tidak terdaftar)
- Siapa saja dapat mendaftar / membuat user baru tanpa harus login terlebih dahulu.
- Admin yang dapat mengubah hak akses semua user, merubah data user lain, dan menghapus user lain.
- Registered User dapat melihat daftar semua user tanpa dapat merubah maupun menghapus user lain.
- Registerd User dapat merubah data pribadinya.
- Untuk dapat melihat data user (data pribadi maupun data semua user), user harus login terlebih dahulu.
Materi Dasar
Sebelum dilanjutkan ke tutorial, kita pelajari dulu logika dasar untuk hak akses.
Logika untuk hak akses tidaklah rumit, hanya dengan logika if sederhana. Kita asumsikan misalkan ada 3 jenis user seperti dalam tutorial kali ini (admin, member, guest) dalam sebuah aplikasi. Untuk dapat mengakses halaman member, user harus terdaftar dan login terlebih dahulu. Kemudian user yang login ini harus dapat dikenali aplikasi apakah ia berstatus sebagai
admin atau bukan. Hal ini dikarenakan fungsionalitas aplikasi tidak sama untuk level user yang berbeda. Misalkan:
admin boleh menghapus user lain sedangkan user biasa tidak.
Maka logika dasar dari kasus ini adalah seperti berikut:
1 2 3 | if ( $userLevel == 'admin' ) {
echo "<a href='delete.php'?id=$id>Delete</a>" ;
}
|
Kode diatas berarti bahwa jika user memiliki hak akses sebagai
admin, maka link untuk delete akan ditampilkan, sedangkan jika tidak maka link delete tidak akan ditampilkan. Simpel banget kan… ^_^
Dalam tutorial kali ini, hak akses
(role) disimpan didalam session untuk kemudian dapat kita panggil lagi pada halaman lainnya untuk dilakukan pengecekan. Untuk melakukan pengecekan apakah user yang login memiliki
role sebagai admin atau tidak, kode program nya akan terlihat seperti berikut.
1 2 3 | if ( $_SESSION [ 'role' ] == 'admin' ) {
}
|
Kemudian kode tersebut kita sisipkan pada bagian yang hanya boleh diakses oleh user yang memiliki role sebagai admin.
Jadi, jika ada beberapa menu ataupun fungsionalitas yang hanya boleh digunakan oleh user dengan hak akses tertentu, cukup gunakan logika dasar ini. Jika kebutuhan aplikasi Anda lebih kompleks dari ini, maka tinggal disesuaikan dan dikembangkan sesuai dengan kebutuhan.
Langkah 1 – Struktur Folder
Buatlah folder dengan nama
hak_akses pada
C:\xampp\htdocs\. Kemudian buat lagi dua folder dengan nama
css dan
images didalam folder hak_akses.
Kemudian copy-kan file
.css dari file yang sudah didownload kedalam folder
css, dan file
background.jpg kedalam folder
images.
File-file
.css ini nantinya akan kita gunakan sebagai alat bantu untuk mempercantik tampilan. Untuk menggunakan file-file
.css ini cukup dengan menambahkan baris kode seperti berikut.
1 2 3 4 5 | < link rel = "stylesheet" href = "css/reset.css" type = "text/css" />
< link rel = "stylesheet" href = "css/normalize.css" type = "text/css" />
< link rel = "stylesheet" href = "css/permata-ui-kit.css" type = "text/css" />
< link rel = "stylesheet" href = "css/bootstrap.css" type = "text/css" />
< link rel = "stylesheet" href = "css/style.css" type = "text/css" />
|
Langkah 2 – Database
Buat database dengan nama
tutorial_3. Kemudian buat tabel dengan nama
users dengan data sebagai berikut.
Fieldname | Datatype |
id_user | int(4), PRIMARY, AUTO INCREMENT |
username | varchar(20), UNIQUE |
password | varchar(300) |
email | varchar(100) |
fullname | varchar(100) |
role | enum(‘admin’, ‘member’) |
Kemudian buat satu user sebagai administrator dengan menjalankan kode berikut pada SQL query (sesuaikan dengan DBMS yang Anda gunakan) agar kita dapat login.
1 | insert into users values ( '' , 'admin' , 'admin' , 'admin@admin.com' , 'Administrator' , 'admin' );
|
Langkah 3 – File Konfigurasi
Seperti biasa, sebelum membuat aplikasi lebih jauh, kita buat terlebih dulu file konfigurasi untuk koneksi ke server. Ketikkan kode berikut dan simpan dalam folder
hak_akses dengan nama
config.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php
$host = 'localhost' ;
$user = 'root' ;
$pass = '' ;
$dbname = 'tutorial_3' ;
$connect = mysql_connect( $host , $user , $pass ) or die (mysql_error());
$dbselect = mysql_select_db( $dbname );
?>
|
Langkah 4 – Register User
Ketikkan kode berikut dan simpan dalam folder
hak_akses dengan nama
index.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <? php
session_start();
$ logged_in = false ;
//jika session username belum dibuat, atau session username kosong
if (isset($_SESSION['username']) || !empty($_SESSION['username'])) {
$ logged_in = true ;
}
include_once('config.php');
?>
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
< title >Tutorial Hak Akses - Nurwahyudin.Com</ title >
< link rel = "stylesheet" href = "css/reset.css" type = "text/css" />
< link rel = "stylesheet" href = "css/normalize.css" type = "text/css" />
< link rel = "stylesheet" href = "css/permata-ui-kit.css" type = "text/css" />
< link rel = "stylesheet" href = "css/bootstrap.css" type = "text/css" />
< link rel = "stylesheet" href = "css/style.css" type = "text/css" />
</ head >
< body >
< div style = "margin:auto; padding:50px 0 30px; text-align:center" >
< h1 >Nurwahyudin.Com</ h1 >
< p >Tutorial Hak Akses</ p >
</ div >
< div style = "margin:auto" >
< form class = "rounded_3 shadow_3" action = "insert.php" method = "post" style = "width:400px; margin:auto;" >
< fieldset class = "rounded_3" >
< legend >Register New User</ legend >
<? php
$message = $_GET['msg'];
if ($message == 'success') {
?>
< div class = "info" >Success</ div >
<? php } else if ($message == 'failed') {?>
< div class = "error" >Error</ div >
<? php } ?>
< div >
< label for = "username" >Username</ label > < input id = "username" name = "username" class = "wide" type = "text" required = "required" />
</ div >
< div >
< label for = "password" >Password</ label > < input id = "password" name = "password" class = "wide" type = "password" required = "required" />
</ div >
< div >
< label for = "email" >Email</ label > < input id = "email" name = "email" class = "wide" type = "email" required = "required" />
</ div >
< div >
< label for = "fullname" >Fullname</ label > < input id = "fullname" name = "fullname" class = "wide" type = "text" />
</ div >
< div >
<? php if ($logged_in) { ?>
< span class = "left" >< a href = "users.php" >Lihat Data</ a ></ span >
<? php } else {?>
< span class = "left" >< a href = "login.php" >Login</ a ></ span >
<? php } ?>
< input class = "right" type = "submit" name = "submit" value = "Buat User" />
</ div >
</ fieldset >
</ form >
</ div >
</ body >
</ html >
|
Pada baris ke-7 kita lakukan pengecekan apakah user sudah login atau belum dengan kode
if (isset($_SESSION['username']) || !empty($_SESSION['username'])). Jika sudah login, maka variabel
$logged_in di set menjadi
true. Variabel ini kita gunakan untuk pengecekan lagi nantinya.
Pada baris ke-57 kita lakukan pengecekan terhadap nilai dari variabel
$logged_in dengan kode
if ($logged_in). Jika variabel ini bernilai true (yang berarti user sudah login), maka tampilkan link untuk melihat data user. Sedangkan jika bernilai
false (yang berarti user belum login), maka tampilkan link menuju halaman login.
Selanjutnya, buat file baru dan ketikkan kode berikut ini. Setelah selesai simpan dengan nama
insert.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php
include_once ( 'config.php' );
$username = mysql_real_escape_string( $_POST [ 'username' ]);
$password = mysql_real_escape_string( $_POST [ 'password' ]);
$email = mysql_real_escape_string( $_POST [ 'email' ]);
$fullname = mysql_real_escape_string( $_POST [ 'fullname' ]);
$role = 'member' ;
$query = mysql_query( "insert into users values('', '$username', '$password', '$email', '$fullname', '$role')" );
if ( $query ) {
header( 'location: index.php?msg=success' );
} else {
header( 'location: index.php?msg=failed' );
}
?>
|
Setelah selesai, coba buka browser dan ketikkan
localhost/hal_akses/register.php. Hasilnya akan terlihat seperti gambar dibawah. Cobalah untuk menambahkan beberapa user baru.
Saat ini, kita masih belum dapat login ke aplikasi (iyalah, login nya belum dibikin
). Selanjutnya kita buat halaman untuk login.
Langkah 5 – Login
Ketikkan kode berikut dan simpan dengan nama
login.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <? php
session_start();
include_once('config.php');
if (!empty($_SESSION['username'])) {
header('location:index.php');
}
?>
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
< title >Tutorial Hak Akses - Nurwahyudin.Com</ title >
< link rel = "stylesheet" href = "css/reset.css" type = "text/css" />
< link rel = "stylesheet" href = "css/normalize.css" type = "text/css" />
< link rel = "stylesheet" href = "css/permata-ui-kit.css" type = "text/css" />
< link rel = "stylesheet" href = "css/bootstrap.css" type = "text/css" />
< link rel = "stylesheet" href = "css/style.css" type = "text/css" />
</ head >
< body >
< div style = "margin:auto; padding:50px 0 30px; text-align:center" >
< h1 >Nurwahyudin.Com</ h1 >
< p >authorization required!</ p >
</ div >
< div style = "margin:auto" >
< form class = "rounded_3 shadow_3" action = "auth.php" method = "post" style = "width:400px; margin:auto;" >
< fieldset class = "rounded_3" >
< legend >Login</ legend >
<? php
$error = $_GET['error'];
if ($error == 1) {
?>
< div class = "error" >Username dan Password belum diisi.</ div >
<? php } else if ($error == 2) {?>
< div class = "error" >Username belum diisi.</ div >
<? php } else if ($error == 3) {?>
< div class = "error" >Password belum diisi.</ div >
<? php } else if ($error == 4) {?>
< div class = "error" >Username dan Password tidak terdaftar.</ div >
<? php } ?>
< div >
< label for = "username" >Username</ label > < input id = "username" name = "username" class = "wide" type = "text" required = "required" />
</ div >
< div >
< label for = "password" >Password</ label > < input id = "password" name = "password" class = "wide" type = "password" required = "required" />
</ div >
< div >
< span class = "left" >< a href = "index.php" >Daftar Baru</ a ></ span >
< input class = "right" type = "submit" name = "submit" value = "Login" />
</ div >
</ fieldset >
</ form >
</ div >
</ body >
</ html >
|
Berikutnya kita buat file untuk autentikasi user yang login. Ketikkan kode berikut dan simpan dengan nama
auth.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?php
include ( 'config.php' );
session_start();
$username = $_POST [ 'username' ];
$password = $_POST [ 'password' ];
$username = mysql_real_escape_string( $username );
$password = mysql_real_escape_string( $password );
if ( empty ( $username ) && empty ( $password )) {
header( 'location:login.php?error=1' );
break ;
} else if ( empty ( $username )) {
header( 'location:login.php?error=2' );
break ;
} else if ( empty ( $password )) {
header( 'location:login.php?error=3' );
break ;
}
$query = mysql_query( "select * from users where username='$username' and password='$password'" );
$data = mysql_fetch_array( $query );
if (mysql_num_rows( $query ) == 1) {
$_SESSION [ 'username' ] = $username ;
$_SESSION [ 'role' ] = $data [ 'role' ];
header( 'location:users.php' );
} else {
header( 'location:login.php?error=4' );
}
?>
|
Setelah selesai, coba buka browser dan ketikkan
localhost/hal_akses/login.php. Hasilnya akan terlihat seperti gambar dibawah.
Berikutnya, kita buat sebuah file untuk melakukan pengecekan apakah user sudah login atau belum. Jika user sudah login, maka user tidak perlu login lagi. Buat dokumen baru dan ketikkan kode berikut. Setelah selesai, simpan dengan nama
cek-login.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php
session_start();
$logged_in = false;
if (!isset( $_SESSION [ 'username' ]) || empty ( $_SESSION [ 'username' ])) {
header( 'location:login.php' );
} else {
$logged_in = true;
}
?>
|
File
cek-login.php ini akan kita
include pada beberapa file lainnya.
Langkah 6 – Daftar User
Buat dokumen baru dan ketikkan kode berikut. Setelah selesai simpan dengan nama
users.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | <?php
include_once( 'config.php' );
include_once( 'cek-login.php' );
?>
<head>
<meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" />
<title>Tutorial Hak Akses - Nurwahyudin.Com</title>
<link rel= "stylesheet" href= "css/reset.css" type= "text/css" />
<link rel= "stylesheet" href= "css/normalize.css" type= "text/css" />
<link rel= "stylesheet" href= "css/permata-ui-kit.css" type= "text/css" />
<link rel= "stylesheet" href= "css/bootstrap.css" type= "text/css" />
<link rel= "stylesheet" href= "css/style.css" type= "text/css" />
</head>
<body>
<div style= "margin:auto; padding:50px 0 30px; text-align:center" >
<h1>Nurwahyudin.Com</h1>
<p>Tutorial Hak Akses</p>
</div>
<div style= "margin:auto" >
<div class = "rounded_3 shadow_3 content" >
<?php
$username = $_SESSION[ 'username' ];
$query_user_login = mysql_query( "select * from users where username='$username'" );
$user_login = mysql_fetch_array($query_user_login);
?>
<h3>Selamat Datang <?php echo $user_login[ 'fullname' ]; ?></h3>
<br />
<?php
$message = $_GET[ 'msg' ];
if ($message == 'success' ) {
?>
<div class = "info" >Success</div>
<?php } else if ($message == 'failed' ) {?>
<div class = "error" >Error</div>
<?php } ?>
<a href= "index.php" class = "left" >Tambah User</a> <a href= "logout.php" class = "right" >Logout</a>
<br />
<table class = "view" >
<thead>
<tr>
<th width= "20" >No.</th>
<th>Username</th>
<th>Fullname</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php
$query = mysql_query( "select * from users" );
$i = 1 ;
while ($data = mysql_fetch_array($query)) {
?>
<tr class = "<?php if ($i % 2 == 0) { echo " odd "; } else { echo " even "; } ?>" >
<td><?php echo $i; ?></td>
<td>
<?php
echo $data[ 'username' ];
if ($_SESSION[ 'role' ] == 'admin' ) {
?>
<div class = "row-actions" >
<a href= "edit.php?uid=<?php echo $data['id_user'];?>" >Edit</a>
<?php if ($data[ 'username' ] != 'admin' ) {?>
| <a href= "delete.php?uid=<?php echo $data['id_user'];?>" class = "delete" >Delete</a>
<?php } ?>
</div>
<?php } ?>
</td>
<td><?php echo $data[ 'fullname' ]; ?></td>
<td><?php echo $data[ 'email' ]; ?></td>
</tr>
<?php
$i++;
}
?>
</tbody>
</table>
</div>
</div>
<div class = "clear" ></div>
<div style= "padding-bottom:50px;" ></div>
</body>
</html>
|
Perhatikan baris ke-70 terdapat kode
if ($_SESSION['role'] == ‘admin’). Pada baris ini kita lakukan pengecekan hak akses apakah user yang login memiliki hak akses sebagai admin atau tidak. Jika user memiliki hak akses sebagai admin, maka tampilkan menu
edit dan
delete. Jika tidak memiliki hak akses sebagai admin, maka menu
edit dan
delete tidak boleh ditampilkan.
Cobalah lihat hasilnya pada browser dengan membuka halaman
localhost/hak_akses/users.php. Hasilnya akan terlihat seperti gambar berikut.
Selanjutnya kita buat halaman edit data. Buat dokumen baru dan ketikkan kode berikut, kemudian simpan dengan nama
edit.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | <? php
session_start();
include_once('config.php');
include_once('cek-login.php');
?>
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
< title >Tutorial Hak Akses - Nurwahyudin.Com</ title >
< link rel = "stylesheet" href = "css/reset.css" type = "text/css" />
< link rel = "stylesheet" href = "css/normalize.css" type = "text/css" />
< link rel = "stylesheet" href = "css/permata-ui-kit.css" type = "text/css" />
< link rel = "stylesheet" href = "css/bootstrap.css" type = "text/css" />
< link rel = "stylesheet" href = "css/style.css" type = "text/css" />
</ head >
< body >
< div style = "margin:auto; padding:50px 0 30px; text-align:center" >
< h1 >Nurwahyudin.Com</ h1 >
< p >Tutorial Hak Akses</ p >
</ div >
< div style = "margin:auto" >
< form class = "rounded_3 shadow_3" action = "update.php" method = "post" style = "width:400px; margin:auto;" >
< fieldset class = "rounded_3" >
< legend >Edit User</ legend >
<? php
$message = $_GET['msg'];
if ($message == 'success') {
?>
< div class = "info" >Success</ div >
<? php } else if ($message == 'failed') {?>
< div class = "error" >Error</ div >
<? php } ?>
<? php
// terima id_user dari halaman users
$user_id = $_GET['uid'];
$ query = mysql_query ("select * from users where id_user = '$user_id' ");
$ data = mysql_fetch_array ($query);
?>
< div >
< label for = "username" >Username</ label > < input id = "username" name = "username" class = "wide" type = "text" required = "required" value="<?php echo $data['username']; ?>" disabled="disabled" />
</ div >
< div >
< label for = "password" >Password</ label > < input id = "password" name = "password" class = "wide" type = "password" required = "required" value="<?php echo $data['password']; ?>" <? php if ($data['username'] == 'admin') {?> disabled="disabled" <? php } ?> />
</ div >
< div >
< label for = "email" >Email</ label > < input id = "email" name = "email" class = "wide" type = "email" required = "required" value="<?php echo $data['email']; ?>" />
</ div >
< div >
< label for = "fullname" >Fullname</ label > < input id = "fullname" name = "fullname" class = "wide" type = "text" value="<?php echo $data['fullname']; ?>" />
</ div >
<? php
// jika user yang login memiliki role sebagai admin, maka tampilkan opsi ini
if ($_SESSION['role'] == 'admin') {
if ($data['username'] != 'admin') {
?>
< div >
< label for = "role" >Role</ label >
< select name = "role" >
< option value = "admin" >Admin</ option >
< option value = "member" >Member</ option >
</ select >
</ div >
<? php
}
}
?>
< div >
<? php if ($logged_in) { ?>
< span class = "left" >< a href = "users.php" >Lihat Data</ a ></ span >
<? php } else {?>
< span class = "left" >< a href = "login.php" >Login</ a ></ span >
<? php } ?>
< input class = "right" type = "submit" name = "submit" value = "Update User" />
</ div >
< input type = "hidden" name = "user_id" value="<?php echo $data['id_user']; ?>" />
</ fieldset >
</ form >
</ div >
</ body >
</ html >
|
Perhatikan pada baris ke-63, kembali kita lakukan pengecekan hak akses apakah user memiliki role sebagai admin atau tidak dengan kode
if ($_SESSION['role'] == ‘admin’). Jika user memiliki role sebagai admin, maka user boleh merubah role user lain.
Agar hasil edit-an dapat disimpan, buat dokumen baru dan ketikkan kode berikut. Kemudian simpan dengan nama
update.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php
include ( 'config.php' );
$id = $_POST [ 'user_id' ];
$password = $_POST [ 'password' ];
$fullname = $_POST [ 'fullname' ];
$email = $_POST [ 'email' ];
$role = $_POST [ 'role' ];
$query = mysql_query( "update users set password='$password', fullname='$fullname', email='$email', role='$role' where id_user='$id'" ) or die (mysql_error());
if ( $query ) {
header( 'location:users.php?msg=success' );
} else {
header( 'location:users.php?msg=failed' );
}
?>
|
Sampai disini, kita sudah dapat meng-edit data. Untuk melihat hasilnya, coba buka halaman
localhost/hak_akses/users.php, kemudian edit-lah salah satu data yang ada.
Untuk dapat menghapus data, buat dokumen baru dan ketikkan kode berikut. Simpan dengan nama
delete.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php
include ( 'config.php' );
$uid = $_GET [ 'uid' ];
$query = mysql_query( "delete from users where id_user='$uid'" ) or die (mysql_error());
if ( $query ) {
header( 'location:users.php?msg=success' );
} else {
header( 'location:users.php?msg=failed' );
}
?>
|
Kesimpulan
Hak Akses atau role tidaklah sulit untuk dibuat. Cukup dengan menggunakan logika
if sederhana kita dapat membuat hak akses. Jika ada kesulitan ataupun jika ada yang kurang jelas, silahkan tanyakan pada kotak komentar dibawah.
Selamat belajar, dan semoga bermanfaat. ^_^