Cara Membuat Multi Level User (Hak Akses Role) dengan PHP

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.

Alur Multi Level User (Role)
Alur Multi Level User (Role)

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).

Baca Juga

Ali Akbar

Software Developer yang fokus mengembangkan aplikasi berbasis Web dan Desktop. Senang mempelajari teknologi baru terutama di bidang web design dan web development.

View all posts by Ali Akbar →

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *