Setelah kita berhasil merancang fondasi database rekam medis pada tutorial sebelumnya, langkah krusial selanjutnya adalah mengatur gerbang keamanannya. Membangun sistem informasi klinik atau aplikasi pemantauan kesehatan tentu membutuhkan hak akses yang berbeda-beda.
Seorang Admin bisa mengelola semua data, Dokter/Bidan hanya fokus pada input diagnosa pasien, dan Pasien hanya boleh melihat riwayat kesehatannya sendiri tanpa bisa mengedit. Di sinilah kita membutuhkan Sistem Login Multi-Level.
Dalam tutorial ini, kita akan menggunakan fitur $_SESSION pada PHP untuk membagi hak akses pengguna secara aman dan terstruktur.
Langkah 1: Menyiapkan Tabel User di MySQL
Kita perlu menambahkan satu tabel khusus untuk menyimpan data otentikasi (username, password, dan hak akses). Buka database db_klinik_sehat yang sudah kita buat sebelumnya, lalu jalankan query ini:
CREATE TABLE tabel_user (
id_user INT AUTO_INCREMENT PRIMARY KEY,
nama_pengguna VARCHAR(50) NOT NULL,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
level ENUM('admin', 'dokter', 'pasien') NOT NULL
) ENGINE=InnoDB;
-- Memasukkan Data Dummy untuk Percobaan
INSERT INTO tabel_user (nama_pengguna, username, password, level) VALUES
('Administrator', 'admin123', 'admin123', 'admin'),
('dr. Andi Sp.PD', 'dokter_andi', 'dokter123', 'dokter'),
('Budi Santoso', 'pasien_budi', 'pasien123', 'pasien');
Catatan Keamanan: Dalam produksi nyata, pastikan password selalu dienkripsi menggunakan fungsi password_hash() atau minimal md5() di PHP. Untuk tutorial dasar ini, kita gunakan teks biasa agar logikanya lebih mudah dipahami.
Langkah 2: Membuat Form Login HTML (index.php)
Buat sebuah file bernama index.php. Ini adalah antarmuka utama tempat pengguna memasukkan username dan password mereka.
<!DOCTYPE html>
<html>
<head>
<title>Login Sistem Klinik</title>
</head>
<body>
<h2>Silakan Login</h2>
<form action="cek_login.php" method="POST">
<label>Username:</label><br>
<input type="text" name="username" required><br><br>
<label>Password:</label><br>
<input type="password" name="password" required><br><br>
<button type="submit">Login</button>
</form>
</body>
</html>
Langkah 3: Logika Pemrosesan Multi-Level (cek_login.php)
File ini adalah otak dari sistem kita. File cek_login.php akan menangkap data dari form, mencocokkannya dengan database, lalu melempar (redirect) pengguna ke halaman yang sesuai dengan level mereka.
<?php
// Mengaktifkan session PHP
session_start();
// Menghubungkan ke database
$koneksi = mysqli_connect("localhost", "root", "", "db_klinik_sehat");
// Menangkap data yang dikirim dari form
$username = $_POST['username'];
$password = $_POST['password'];
// Menyeleksi data user dengan username dan password yang sesuai
$login = mysqli_query($koneksi, "SELECT * FROM tabel_user WHERE username='$username' AND password='$password'");
// Menghitung jumlah data yang ditemukan
$cek = mysqli_num_rows($login);
if($cek > 0){
$data = mysqli_fetch_assoc($login);
// Cek jika user login sebagai Admin
if($data['level'] == "admin"){
$_SESSION['username'] = $username;
$_SESSION['level'] = "admin";
header("location:halaman_admin.php");
// Cek jika user login sebagai Dokter
}else if($data['level'] == "dokter"){
$_SESSION['username'] = $username;
$_SESSION['level'] = "dokter";
header("location:halaman_dokter.php");
// Cek jika user login sebagai Pasien
}else if($data['level'] == "pasien"){
$_SESSION['username'] = $username;
$_SESSION['level'] = "pasien";
header("location:halaman_pasien.php");
}else{
// Alihkan kembali ke halaman login jika level tidak ditemukan
header("location:index.php?pesan=gagal");
}
}else{
// Jika username/password salah
header("location:index.php?pesan=gagal");
}
?>
Langkah 4: Melindungi Halaman (Session Check)
Langkah terakhir adalah membuat halaman dashboard untuk masing-masing level (misal: halaman_admin.php). Sangat penting untuk meletakkan kode pengecekan session di baris paling atas halaman agar orang tidak bisa masuk dengan mengetik URL secara langsung (Bypass).
<?php
// Letakkan ini di baris pertama halaman_admin.php
session_start();
// Cek apakah user sudah login dan levelnya benar-benar admin
if($_SESSION['level'] == ""){
header("location:index.php?pesan=belum_login");
} else if($_SESSION['level'] != "admin"){
// Jika yang mencoba akses bukan admin, lempar kembali!
header("location:index.php?pesan=akses_ditolak");
}
?>
<html>
<body>
<h1>Selamat Datang Admin!</h1>
<p>Halo <b><?php echo $_SESSION['username']; ?></b>, Anda memiliki akses penuh ke sistem rekam medis ini.</p>
<a href="logout.php">Logout</a>
</body>
</html>
Kesimpulan
Dengan memadukan logika IF-ELSE pada PHP dan $_SESSION, kita bisa menciptakan gerbang pembatas yang sangat kuat. Teknik dasar ini berlaku untuk hampir semua jenis aplikasi web, mulai dari sistem informasi manajemen rumah sakit, portal sekolah, hingga kasir (POS).
Tahukah Anda bahwa kode login di atas masih sangat rentan diretas menggunakan teknik SQL Injection? Di tutorial berikutnya, kita akan membahas Cara Mencegah SQL Injection pada Form Login dan Input Data Pasien menggunakan Prepared Statements. Jangan sampai data pasien Anda bocor!
Belum ada komentar. Jadilah yang pertama berkomentar!