Banyak aplikasi punya beberapa jenis pengguna: admin, operator, dan member biasa — masing-masing dengan hak akses berbeda. Ini disebut multi level user atau sistem role. Artikel ini membahas cara membuat multi level user dengan PHP dan MySQL.

Konsep Hak Akses (Role)
Setiap pengguna diberi “peran” (role). Saat login, peran disimpan di session. Setiap halaman lalu memeriksa apakah peran pengguna diizinkan mengaksesnya.
Langkah 1: Tambahkan Kolom Role
ALTER TABLE users ADD COLUMN role VARCHAR(20) DEFAULT 'user'; -- contoh nilai: 'admin', 'operator', 'user'
Langkah 2: Simpan Role saat Login
<?php
session_start();
require "koneksi.php";
$stmt = $koneksi->prepare("SELECT id, username, password, role FROM users WHERE username = ?");
$stmt->bind_param("s", $_POST["username"]);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();
if ($user && password_verify($_POST["password"], $user["password"])) {
$_SESSION["user_id"] = $user["id"];
$_SESSION["role"] = $user["role"]; // simpan role
// arahkan sesuai peran
if ($user["role"] === "admin") {
header("Location: admin/dashboard.php");
} else {
header("Location: user/beranda.php");
}
exit;
}
?>
Langkah 3: Membuat Fungsi Penjaga Akses
Buat file cek_akses.php yang dipanggil di awal setiap halaman:
<?php
session_start();
function butuhLogin() {
if (!isset($_SESSION["user_id"])) {
header("Location: login.php");
exit;
}
}
function butuhRole($roleDiizinkan) {
butuhLogin();
if ($_SESSION["role"] !== $roleDiizinkan) {
http_response_code(403);
die("Akses ditolak. Halaman ini khusus $roleDiizinkan.");
}
}
?>
Langkah 4: Melindungi Halaman
Di halaman admin, cukup panggil:
<?php
require "cek_akses.php";
butuhRole("admin"); // hanya admin yang boleh
?>
<h1>Dashboard Admin</h1>
Untuk halaman yang boleh diakses semua yang login (peran apa pun), cukup butuhLogin();.
Menampilkan Menu Sesuai Role
<?php if ($_SESSION["role"] === "admin"): ?>
<a href="admin/kelola-user.php">Kelola User</a>
<?php endif; ?>
Kesalahan Umum
- Hanya menyembunyikan menu tanpa memproteksi halaman — pengguna bisa mengakses URL langsung. Selalu cek role di sisi server tiap halaman.
- Mempercayai data dari form untuk menentukan role — role harus diambil dari database, bukan input pengguna.
Kesimpulan
Anda telah membuat sistem multi level user (role) PHP dan MySQL: menyimpan role saat login, mengarahkan pengguna, dan melindungi halaman dengan fungsi penjaga. Kunci keamanannya: selalu verifikasi role di sisi server pada setiap halaman, bukan sekadar menyembunyikan menu.
Referensi: untuk pendalaman, kunjungi dokumentasi resmi PHP (php.net).

